目前,我正在運行使用硒網格和RemoteWebDriver在Safari上我的Selenium測試。這是我的設置:硒:在RemoteWebDriver開關選項卡用C#
- Mac OS Sierra 10.12.6作爲運行測試的機器。
- Selenium服務器3.5.3。
- Safari 11.
- C#Selenium WebDriver和Selenium支持(最新版本)。
我在我的主機操作系統(Windows 10)上使用端口轉發將請求轉發到運行在我的虛擬機上的Mac。在我的Mac我有硒電網樞紐,它在我奔跑像這樣:
java -jar selenium-server-standalone-3.5.3.jar -role hub -port 4723
此外,還有一個節點:
java -jar selenium-server-standalone-3.5.3.jar -role node -hub http://10.0.2.15:4723/grid/register
在代碼中,我開始我的司機是這樣的:
SafariOprions options = new SafariOptions();
IWebDriver driver = new RemoteWebDriver(new Uri(hubURL), options.ToCapabilities());
我的測試是在當前的設置運行良好。但是當談到點擊一個屬性爲target='_blank'
的鏈接時,我開始面臨一些麻煩。對於我在本地運行的其他驅動程序,我可以切換選項卡,而不會有任何麻煩:在單擊鏈接之前,我得到了driver.WindowHandles
,然後單擊一個鏈接並再次檢索窗口句柄以與以前的句柄進行比較。之後,我使用driver.SwitchTo().Window(newHandle)
,一切都很好。
但是當涉及到RemoteWebDriver(或Apple的SafariDriver,我不能更準確地說)我總是隻能獲得一個窗口句柄,即使打開新選項卡並且我可以看到它。我試圖避免切換選項卡與「Command + T」作爲解決方案之一建議,因爲我的測試是爲了在所有瀏覽器(鉻,火狐,歌劇,邊緣,Safari)上運行,這不會工作。
更新:我試過在Selenium Grid中通過RemoteWebDriver運行Chrome和其他瀏覽器,我可以說這不是RemoteWebDriver的問題。接下來,我已經安裝了Visual Studio的Mac和重寫幾件事情來運行我的測試,而硒電網,只需使用此代碼:
//if memory serves, just like this
SafariOptions options = new SafariOptions();
SafariDriver driver = new SafariDriver(options);
但不幸的是,這並沒有幫助。司機導航我到頁面,點擊鏈接並打開一個新標籤,但沒有任何開關。當我檢查driver.WindowHandles
我只有一個,雖然有兩個可見的選項卡。 driver.SwitchTo().ActiveElement
和driver.SwitchTo().Frame(hardcoded_frame_name)
都不起作用。相當長的等待時間(在打開鏈接之後60秒以及之後的另一個鏈接)都不起作用。現在我認爲這確實是一個錯誤,我會盡快向蘋果公司報告。
但現在,也許有人有這樣一個奇特的解決方法嗎?
可能與Safaridriver的錯誤太不檢測新窗口 –
你能提供一些等待(WebDriverWait),並重新檢查? – DebanjanB
@DebanjanB,是的,我提供了幾項長期支票,並且徒勞無功。 我已經在網格上檢查了RemoteWebDriver與其他瀏覽器,一切都很好。所以我認爲這個問題與我啓動Selenium Grid和Safari的方式有關。因爲使用nodeconfig.json,我根本沒有得到任何句柄。將嘗試直接在Mac上運行測試併發布任何更新。 –