Heim > Fragen und Antworten > Hauptteil
Wir arbeiten mit dem Selenium-Webtreiber für UI-Tests für Internet Explorer 11. In der Test-Webanwendung werden mehrere Bildschirme angezeigt. In einigen Tests hatten wir am Ende drei Browserfenster und damit drei Driver.WindowHandles. Um von einem WindowHandle zu einem anderen zu wechseln, erwarten wir, dass Driver.WindowHandles mit dem ältesten Fenster zuerst und dem neuesten Fenster zuletzt sortiert wird. Aber das ist nicht der Fall: Es ist völlig zufällig!
Da windowhandle eine GUID ist, erstellen wir am Ende ein Wörterbuch mit der WindowHandle-GUID als Schlüssel und dem Wert als Wert für den im Browserfenster geladenen Seitentyp. Dies führt aber auch dazu, dass das Wörterbuch beibehalten wird, wenn das Fenster geschlossen wird.
Scheint eine Menge Arbeit für so eine einfache Sache zu sein. Gibt es eine bessere Lösung?
P粉9869374572023-11-05 16:56:30
你说得非常正确:
在一次讨论中,Simon 明确提到:
因此,我们将引发 WebDriverWait
,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened)
根据需要:
package demo; 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 NEW_TAB_Handling { public static void main(String[] args) { System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe"); WebDriver driver = new InternetExplorerDriver(); driver.get("http://www.google.com"); String first_tab = driver.getWindowHandle(); System.out.println("Working on Google"); ((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(); while(i1.hasNext()) { String next_tab = i1.next(); if (!first_tab.equalsIgnoreCase(next_tab)) { driver.switchTo().window(next_tab); System.out.println("Working on Facebook"); } } String second_tab = driver.getWindowHandle(); ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');"); wait.until(ExpectedConditions.numberOfWindowsToBe(3)); Set<String> s2 = driver.getWindowHandles(); Iterator<String> i2 = s2.iterator(); while(i2.hasNext()) { String next_tab = i2.next(); if (!first_tab.equalsIgnoreCase(next_tab) && !second_tab.equalsIgnoreCase(next_tab)) { driver.switchTo().window(next_tab); System.out.println("Working on Youtube"); } } driver.quit(); System.out.println("Quit the WebDriver instance"); } }
控制台输出:
Working on Google Working on Facebook Working on Youtube Quit the WebDriver instance
您可以在以下位置找到基于 python 的讨论在新选项卡中打开 Web Selenium + Python p>