修訂 以上回答沒有爲我工作。首先,我必須從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