2014-01-07 67 views
0

我花了很多时间寻找解决方案,看起来应该是可能的,但是至今我一直无法找到方法。如何使用Internet Explorer运行Behat?

我有它使用阳明以下配置运行Chrome不会有问题:

behat.yml

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浏览器的Internet Explorer ,IE和其他变化,但没有喜悦。 我确实有IE驱动程序服务器正在运行,但它似乎没有任何区别。

+0

当您使用IE运行测试时,您是否收到任何错误消息? – sebbo

+0

我收到一个错误“无法打开连接”,但它仍然继续运行,就好像测试正在运行一样(全部失败)。 – MikeCon94

+0

“无法打开连接”就是一切?没有堆栈跟踪或其他什么? – sebbo

回答

3

我现在有工作! 谁的人得到了同样的问题,跨这里的问题跌跌是看出来了什么: 当启动硒服务器使用:

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 

然后修改2500值在每个文件夹中(除了文件夹0)0 IE现在应该跑!

1

修订 以上回答没有为我工作。首先,我必须从3.8.0降级到3.4.0(3.8.0测试会在预期通过时失败,找不到元素或者甚至是非常基本的测试)降级到3.4.0来解决这个问题。以下是对我有用的设置的详细说明。你的可能会略有不同,但这应该有助于某些人。

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

这里是使用硒和behat的最新版本的硒/ behat的Internet Explorer 11设置的详细说明。

composer.json类似:

{ 
    "name": "test", 
    "description": "Joe applications", 
    "type": "project", 
    "authors": [ 
     { 
      "name": "Joseph Olstad", 
      "email": "[email protected]" 
     } 
    ], 
    "require-dev": { 
     "behat/behat": "^3.2.3", 
    }, 
    "require": { 
     "lakion/mink-debug-extension": "^1.2", 
     "behat/mink-selenium2-driver": "^1.1" 
    } 
} 

behat.yml如下:

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 /调试IE11,从Linux PHP环境中运行贝哈特,如果你的窗口” d必须改变这一点。为了使测试能够以最简单的方式运行,我最终直接在与安装IEDriverServer.exe相同的Windows 7虚拟机上运行behat,并在与behat相同的Windows 7 virtualbox上运行了selenium standalone。

PHP 7.0.x和PHP 5.6.x应该可以运行behat。

改变192.168.99。1添加到设置了Internet Explorer和驱动程序的硒服务器的地址。

Windows 7的32位设置:使用硒3.4.0 32位IEDriverServer.exe(3.4.0

在32位Windows 7

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 

设置在IE11中以100%的基础上,从资料维基SeleniumHQ的Internet Explorer 11 https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

到调试并找出发生了什么我最终使用调试技术将变量转储到文本文件中,将其放入Selenium2Driver.php 中,但实际上修复此问题的牵线木偶选项是这是真正的关键,在获得Internet Explorer和驱动程序的方式上有很多乐趣。可以使用硒的Web界面进行调试,一旦你有这个工作,那么它是在你的behat.yml,貂selenium2驱动程序和硒,你必须工作。 现在我正在进入下一步,即找到一种方法让Internet Explorer忽略我们在测试环境中使用的无效https证书。

我跑贝哈特了该配置(而不是Windows从另一台机器),如下所示:

behat -p seleniuminternetexplorer 

不过,我遇到了另一个障碍,在IEDriverServer坠毁,调试完毕后,琢磨它是拍击删除所有的cookies。

所以为了防止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'); 

看到这个线程的更多细节。 https://github.com/SeleniumHQ/selenium/issues/5054

也看到这个线程: https://groups.google.com/forum/#!topic/selenium-users/Beu-7QFMizk

我也结束了卸载一堆的Windows 7的更新和卸载一堆的Windows 7安全更新,并卸载服务包,不知道那是什么也因为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()); 
+  } 
    } 

现在,你应该能够得到这个工作作为我有。

+0

而且,如果您必须在behat/selenium上使用IE11的自签名证书 –

相关问题