修订 以上回答没有为我工作。首先,我必须从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());
+ }
}
现在,你应该能够得到这个工作作为我有。
当您使用IE运行测试时,您是否收到任何错误消息? – sebbo
我收到一个错误“无法打开连接”,但它仍然继续运行,就好像测试正在运行一样(全部失败)。 – MikeCon94
“无法打开连接”就是一切?没有堆栈跟踪或其他什么? – sebbo