2016-09-22 141 views
1

用於Chrome和Firefox的Selenium在C#中編碼時不會處理切換到在自動化測試期間打開的新選項卡。我不認爲它着重於打開新標籤,因爲當我完全運行我的程序時,我收到此錯誤:「超出範圍」異常和「索引超出範圍。必須是非負數,小於收藏品「。C#Selenium在Chrome和Firefox中打開新選項卡時沒有新窗口句柄

我已經嘗試使用:

driver.SwitchTo().Window(driver.WindowHandles.Last()); 

driver.SwitchTo().Window(driver.WindowHandles[1]); 
driver.SwitchTo().Window(driver.WindowHandles[0]).Close(); // close the first tab 
System.Threading.Thread.Sleep(5000); //Wait 5 seconds just in case 
driver.SwitchTo().Window(driver.WindowHandles[1]); //Makes sure I'm on the correct tab 

但沒有運氣。如果我不關閉第一個選項卡,則會收到錯誤:「NoSuchElementException:無法找到元素:{method ...}」,我認爲這是正確的,因爲焦點仍在第一個選項卡上。任何幫助將不勝感激。謝謝。

+0

一旦你關閉了'tab [0]',舊的'tab [1]'不會成爲新的'tab [0]'? – sokkyoku

+0

是的,我沒注意到。謝謝。但現在我唯一的問題是,我作爲輸入的xpath無法在新選項卡上找到。這是我會發現的另一個問題。再次感謝 – CRich

+0

如果這解決了問題,您的問題提到我可以將它作爲您接受的答案發布。 – sokkyoku

回答

0

一旦您關閉了tab[0],舊的tab[1]將變爲新的tab[0],因此您應該切換爲tab[0]

Selenium在後臺運行,因此窗口在運行時無需處於焦點狀態。這也意味着Selenium永遠不會將焦點改回瀏覽器窗口。如果您在代碼運行時觀看窗口,則應該可以看到瀏覽器更改標籤。

+0

對不起,我應該更好地回答我的問題。我想問的是,當驅動程序使用上面的driver.switchTo函數切換到新選項卡/窗口時,新選項卡/窗口是否會從舊選項卡/窗口更改焦點? – CRich

+0

是的,它的功能就是這樣;) – sokkyoku

+0

好的,謝謝。我認爲我的XPath不正確。非常感謝您的時間幫助我並回答:) – CRich

相關問題