Internet explorer 如何使用Internet Explorer运行Behat?

Internet explorer 如何使用Internet Explorer运行Behat?,internet-explorer,symfony,behat,mink,Internet Explorer,Symfony,Behat,Mink,我已经花了很多时间寻找解决方案,似乎这应该是可能的,但我一直无法找到一个办法 我让它在yml中使用以下配置运行chrome,没有问题: 行为 default: paths: features: features bootstrap: %behat.paths.features%/bootstrap context: parameters: browser: chrome javascript_session: webdriver ext

我已经花了很多时间寻找解决方案,似乎这应该是可能的,但我一直无法找到一个办法

我让它在yml中使用以下配置运行chrome,没有问题:

行为

default:
  paths:
    features: features
    bootstrap: %behat.paths.features%/bootstrap
  context:
    parameters:
      browser: chrome
      javascript_session: webdriver
  extensions:
     Behat\MinkExtension\Extension:
       browser_name: chrome
       goutte: ~
       selenium2: ~
按照同样的逻辑,我尝试将chrome改为IE浏览器和其他变体,但没有任何乐趣。 我确实让IE驱动程序服务器运行,但它似乎没有什么不同。

我现在让它工作了! 对于遇到同样问题并偶然发现问题的人,以下是需要注意的事项: 启动selenium服务器时,请使用:

java -jar C:\xampp\htdocs\selenium-server-standalone-2.39.0.jar -Dwebdriver.ie.driver=Drivers\IEDriverServer.exe
在behat.yml文件中,我有:

default:
  paths:
    features: features
    bootstrap: %behat.paths.features%/bootstrap
  context:
    parameters:
      browser: ie
      javascript_session: webdriver
  extensions:
    Behat\MinkExtension\Extension:
      browser_name: ie
      goutte: ~
      selenium2: ~
如果仍不运行,请确保所有区域的保护模式设置相同(无论启用还是禁用,但必须相同)。 您可以使用regedit通过更改以下位置的值来执行此操作:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones
然后将每个文件夹(文件夹0除外)中的2500值修改为0。 我现在应该跑了

我现在让它工作了! 对于遇到同样问题并偶然发现问题的人,以下是需要注意的事项: 启动selenium服务器时,请使用:

java -jar C:\xampp\htdocs\selenium-server-standalone-2.39.0.jar -Dwebdriver.ie.driver=Drivers\IEDriverServer.exe
在behat.yml文件中,我有:

default:
  paths:
    features: features
    bootstrap: %behat.paths.features%/bootstrap
  context:
    parameters:
      browser: ie
      javascript_session: webdriver
  extensions:
    Behat\MinkExtension\Extension:
      browser_name: ie
      goutte: ~
      selenium2: ~
如果仍不运行,请确保所有区域的保护模式设置相同(无论启用还是禁用,但必须相同)。 您可以使用regedit通过更改以下位置的值来执行此操作:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones
然后将每个文件夹(文件夹0除外)中的2500值修改为0。 我现在应该跑了

更新 上述答案对我来说并不适用。首先,我不得不将selenium driver从3.8.0降级到3.4.0(3.8.0测试在预期通过时会失败,找不到元素,甚至找不到非常基本的测试),降级到3.4.0解决了这一问题。下面是一个对我有用的设置的详细说明。你的可能略有不同,但这应该有助于一些人

在此版本的selenium驱动程序(3.4.0)中,您可能需要在behat.yml的浏览器功能部分指定“木偶网”:true,否则将加载firefox而不是Internet Explorer

下面是使用最新版本的selenium和behat为selenium/behat设置Internet Explorer 11的详细说明

composer.json类似于:

{
    "name": "test",
    "description": "Joe applications",
    "type": "project",
    "authors": [
        {
            "name": "Joseph Olstad",
            "email": "spam@lol.biz"
        }
    ],
    "require-dev": {
        "behat/behat": "^3.2.3",
    },
    "require": {
        "lakion/mink-debug-extension": "^1.2",
        "behat/mink-selenium2-driver": "^1.1"
    }
}
行为如下:

seleniuminternetexplorer:
   suites:
     default:
       contexts:
         - FeatureContext:
             parameters:
                 base_url: "https://google.com"
   extensions:
     Behat\MinkExtension:
       default_session: selenium2
       base_url: "https://google.com"
       goutte: ~
       selenium2: ~
       javascript_session: selenium2
       browser_name: "internet explorer"
       selenium2:
         browser: "internet explorer"
         wd_host: http://192.168.99.1:4444/wd/hub
         capabilities: {"browser": "internet explorer", "version": "11", "marionette": true}
       sessions:
         my_session:
            selenium2:
              wd_host: http://192.168.99.1:4444/wd/hub
              browser: "internet explorer"
              capabilities: {"browser": "internet explorer", "version": "11", "marionette": true}
     Lakion\Behat\MinkDebugExtension:
       directory: /tmp/debug-ie11
/tmp/debug-ie11,在Linux-php环境中运行behat,如果在windows上,您必须更改它。为了使测试尽可能以最简单的方式运行,我最终在安装了IEDriverServer.exe的同一个windows 7 virtualbox上直接运行了behat,并在与behat相同的windows 7 virtualbox上运行了selenium standalone。 PHP7.0.x和PHP5.6.x都可以运行behat

将192.168.99.1更改为安装了internet explorer和驱动程序的selenium服务器的地址。 Windows 7 32位安装程序:

使用selenium 3.4.0 32位windows 7上的32位IEDriverServer.exe(3.4.0

java -Dwebdriver.ie.driver=C:/windows/IEDriverServer.exe -Dwebdriver.ie.driver.host=127.0.0.1 -Dwebdriver.ie.driver.whitelisted-ips=192.168.99.1,127.0.0.1 -Dwebdriver.ie.driver.loglevel=DEBUG -Dwebdriver.ie.driver.logfile="C:/temp/ie_selenium.log" -jar selenium-server-standalone-3.4.0.jar
我使用的是java版本“1.8.0_121”

在windows powershell中,必须按如下方式设置internet explorer注册表项

New-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\0" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\1" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\2" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\3" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\4" -Name "2500" -Value 0 -PropertyType DWORD -Force
为了更好地衡量,请执行HKLM:

New-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\0" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\1" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\2" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\3" -Name "2500" -Value 0 -PropertyType DWORD -Force
New-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\internet settings\zones\4" -Name "2500" -Value 0 -PropertyType DWORD -Force
根据SeleniumHQ wiki for Internet Explorer 11的文档,在IE11中将视图设置为100%。

为了调试并弄清楚发生了什么,我最终使用调试技术将变量转储到文本文件中,方法是将其放入Selenium2Driver.php 然而,真正解决这个问题的木偶选项才是真正的关键,在安装Internet Explorer和驱动程序的过程中有很多乐趣。可以使用selenium的web界面进行调试,一旦工作正常,就必须在behat.yml、mink selenium2驱动程序和selenium之间工作。 现在我进入下一步,那就是找到一种方法让Internet Explorer忽略我们在测试环境中使用的无效https证书

我为此配置运行以下行为(从另一台计算机,而不是windows):

然而,我遇到了另一个障碍,IEDriverServer崩溃了,在调试之后,我认为它是在删除所有cookie时崩溃的

因此,为了防止IEDriverServer.exe崩溃并让IE11与seleniun一起工作,我必须禁用php webdriver此部分中的“删除所有cookie”: instaclick/php webdriver/lib/webdriver/Session.php

/**
 * Delete all cookies: /session/:sessionId/cookie (DELETE)
 *
 * @return \WebDriver\Session
 */
public function deleteAllCookies()
{
    //$this->curl('DELETE', '/cookie');

    return $this;
}
因此,请确保注释掉/禁用此行

//$this->curl('DELETE', '/cookie');
有关更多详细信息,请参阅此线程

另请参见此线程:

我还卸载了一系列windows 7更新,卸载了一系列windows 7安全更新,还卸载了一个service pack,不确定这是否也有帮助,因为3.8.0版对我来说仍然不起作用,但降级到3.4.0似乎暂时解决了问题

而且,如果您需要绕过IE11自签名证书警告的解决方案,请为不同的域或网站域名使用自签名证书:

diff --git a/behat/features/bootstrap/FeatureContext.php b/behat/features /bootstrap/FeatureContext.php
index 99511e8..7f50579 100644
--- a/behat/features/bootstrap/FeatureContext.php
+++ b/behat/features/bootstrap/FeatureContext.php
@@ -324,6 +324,13 @@ class FeatureContext extends RawMinkContext implements Context, SnippetAccepting
        $findName->click();
      }
   }
+
+  public function imgoingtosaythis($what_im_sayin) {
+    if ($fp = fopen('z_debug_saythis.txt', 'a')) {
+      fwrite($fp, 'debug='.print_r($what_im_sayin, true) . "\n");
+      fclose($fp);
+    }
+  }
   /**
    * Opens homepage
    * Example: Given I am on "/" */
@@ -336,6 +343,13 @@ class FeatureContext extends RawMinkContext implements Context, SnippetAccepting
   public function iAmOnHomepage()
   {
       $this->visitPath('/');
+      try {
+        //WORKAROUND FOR IE11 INCORRECT CERTIFICATE OR CERT WARNING SELF SIGNED INCORRECT DOMAIN
+        $driver = $this->getSession()->getDriver();
+        $driver->executeScript("javascript:try {document.getElementById('overridelink').click();} catch (err) {console.log('probably cert warn already accepted');}");
+      }
+      catch (Exception $e) {
+        $this->imgoingtosaythis($e->getMessage());
+      }
   }
    /**
    * Opens specified page
@@ -349,6 +363,13 @@ class FeatureContext extends RawMinkContext implements Context, SnippetAccepting
  public function visit($page)
  {
      $this->visitPath($page);
+      try {
+        //WORKAROUND FOR IE11 INCORRECT CERTIFICATE OR CERT WARNING SELF SIGNED INCORRECT DOMAIN
+        $driver = $this->getSession()->getDriver();
+        $driver->executeScript("javascript:try {document.getElementById('overridelink').click();} catch (err) {console.log('probably cert warn already accepted');}");
+      }
+      catch (Exception $e) {
+        $this->imgoingtosaythis($e->getMessage());
+      }
   }
现在,您应该能够像我一样使其正常工作。

更新了 上述答案对我来说并不适用。首先,我不得不将selenium driver从3.8.0降级到3.4.0(3.8.0测试在预期通过时会失败,找不到元素,甚至找不到非常基本的测试),降级到3.4.0解决了这一问题。下面是一个对我有用的设置的详细说明。你的可能略有不同,但这应该有助于一些人

在此版本的selenium驱动程序(3.4.0)中,您可能需要在behat.yml的浏览器功能部分指定“木偶网”:true,否则将加载firefox而不是Internet Explorer

下面是使用最新版本的selenium和behat为selenium/behat设置Internet Explorer 11的详细说明

composer.json类似于:

{
    "name": "test",
    "description": "Joe applications",
    "type": "project",
    "authors": [
        {
            "name": "Joseph Olstad",
            "email": "spam@lol.biz"
        }
    ],
    "require-dev": {
        "behat/behat": "^3.2.3",
    },
    "require": {
        "lakion/mink-debug-extension": "^1.2",
        "behat/mink-selenium2-driver": "^1.1"
    }
}
行为如下:

seleniuminternetexplorer:
   suites:
     default:
       contexts:
         - FeatureContext:
             parameters:
                 base_url: "https://google.com"
   extensions:
     Behat\MinkExtension:
       default_session: selenium2
       base_url: "https://google.com"
       goutte: ~
       selenium2: ~
       javascript_session: selenium2
       browser_name: "internet explorer"
       selenium2:
         browser: "internet explorer"
         wd_host: http://192.168.99.1:4444/wd/hub
         capabilities: {"browser": "internet explorer", "version": "11", "marionette": true}
       sessions:
         my_session:
            selenium2:
              wd_host: http://192.168.99.1:4444/wd/hub
              browser: "internet explorer"
              capabilities: {"browser": "internet explorer", "version": "11", "marionette": true}
     Lakion\Behat\MinkDebugExtension:
       directory: /tmp/debug-ie11
/tmp/debug-ie11,在Linux-php环境中运行behat,