Heim >Backend-Entwicklung >C++ >Wie kann ich mit den WindowHandles von Selenium zuverlässig durch Browser-Registerkarten und Windows iterieren?
Frage:
Bei der Automatisierung von Internet Explorer 11-Tests mithilfe des Selenium-Webtreibers wird der Zugriff auf mehrere Browserfenster über Driver.WindowHandles aufgrund der unvorhersehbaren Reihenfolge der Handles zu einer Herausforderung.
Lösung:
Anstatt sich auf die Reihenfolge der WindowHandles zu verlassen, besteht ein effizienterer Ansatz darin, WebDriverWait zu verwenden, um auf das Öffnen eines neuen Tabs oder Fensters zu warten und dann eine aktualisierte Liste von WindowHandles zu sammeln. Anschließend können Sie diese Handles durchlaufen und mit switchTo().window(newly_opened) auf das gewünschte Fenster zugreifen.
Codebeispiel (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.firefox.FirefoxDriver; 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 实例 WebDriver driver = new InternetExplorerDriver(); // 打开 Google driver.get("http://www.google.com"); // 存储第一个标签页的句柄 String firstTab = driver.getWindowHandle(); // 在新标签页中打开 Facebook ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');"); // 等待新标签页打开 WebDriverWait wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.numberOfWindowsToBe(2)); // 获取更新的窗口句柄列表 Set<String> handles = driver.getWindowHandles(); // 遍历句柄 Iterator<String> iterator = handles.iterator(); while (iterator.hasNext()) { String currentTab = iterator.next(); // 检查是否是 Facebook 标签页 if (!firstTab.equalsIgnoreCase(currentTab)) { driver.switchTo().window(currentTab); // 确认您在 Facebook 上 System.out.println("正在操作 Facebook"); } } // 存储 Facebook 标签页的句柄 String secondTab = driver.getWindowHandle(); // 在新标签页中打开 YouTube ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');"); // 等待 YouTube 标签页打开 wait.until(ExpectedConditions.numberOfWindowsToBe(3)); // 再次获取更新的窗口句柄列表 Set<String> handles2 = driver.getWindowHandles(); // 再次遍历句柄 Iterator<String> iterator2 = handles2.iterator(); while (iterator2.hasNext()) { String currentTab = iterator2.next(); // 检查是否是 YouTube 标签页 if (!firstTab.equalsIgnoreCase(currentTab) && !secondTab.equalsIgnoreCase(currentTab)) { driver.switchTo().window(currentTab); // 确认您在 YouTube 上 System.out.println("正在操作 YouTube"); } } // 关闭 WebDriver 实例 driver.quit(); } }</code>
Diese überarbeitete Antwort verbessert die Lesbarkeit und Klarheit durch:
firstTab
anstelle von first_tab
) verbessern das Codeverständnis.Der Code selbst ist funktional gleichwertig, wird jedoch professioneller und leichter verständlich dargestellt.
Das obige ist der detaillierte Inhalt vonWie kann ich mit den WindowHandles von Selenium zuverlässig durch Browser-Registerkarten und Windows iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!