Selenium窗口和標籤高效管理的最佳實踐
引言
使用Selenium WebDriver進行Internet Explorer 11的UI測試時,管理多個標籤和窗口可能很棘手。為了有效地跟踪它們,使用WindowHandles
屬性至關重要。然而,當窗口句柄的預期順序不穩定時,就會出現常見問題。本文將介紹如何解決此問題並探索更有效的解決方案。
窗口句柄順序的隨機性
與預期相反,WindowHandles
的順序並不穩定。 WebDriver實現以任意方式迭代它們,沒有任何插入順序的保證。這可能導致難以有效管理多個窗口並在它們之間切換。
使用字典進行管理
一種解決方案是創建一個字典,使用WindowHandle
GUID作為鍵,相應的頁麵類型作為值。這種方法確保了在窗口之間正確切換。但是,它需要額外的維護,尤其是在關閉窗口時。
引入WebDriverWait
更好的方法是使用WebDriverWait
。這允許您在收集WindowHandles
之前暫停。通過在每次打開新標籤/窗口時收集它們,您可以創建一個有序列表,並使用switchTo().window(newly_opened)
切換到所需的窗口。
示例實現
以下是Java中的示例實現:
<code class="language-java">import java.util.Iterator; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class 新标签页处理 { public static void main(String[] args) { WebDriver driver = new InternetExplorerDriver(); driver.get("http://www.google.com"); String first_tab = driver.getWindowHandle(); ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');"); WebDriverWait wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.numberOfWindowsToBe(2)); Set<String> s1 = driver.getWindowHandles(); Iterator<String> i1 = s1.iterator(); String next_tab; while (i1.hasNext()) { next_tab = i1.next(); if (!first_tab.equalsIgnoreCase(next_tab)) { driver.switchTo().window(next_tab); } } } }</code>
此代碼自動打開多個標籤頁,等待它們加載,然後使用有序的WindowHandles
列表切換到相應的窗口。
結論
雖然使用字典進行窗口管理是可行的,但在創建新標籤頁時引入WebDriverWait
和收集WindowHandles
為在Selenium中跟踪和迭代多個標籤頁和窗口提供了一種更高效、更靈活的解決方案。
以上是如何以不可預測的順序有效地追蹤和迭代 Selenium WindowHandles?的詳細內容。更多資訊請關注PHP中文網其他相關文章!