Rumah > Soal Jawab > teks badan
Kami sedang bekerjasama dengan pemacu web Selenium untuk ujian UI untuk Internet Explorer 11. Dalam aplikasi web ujian, beberapa skrin muncul. Dalam beberapa ujian, kami mendapat tiga tetingkap penyemak imbas dan oleh itu tiga Driver.WindowHandles. Untuk bertukar daripada satu WindowHandle ke yang lain, kami menjangkakan Driver.WindowHandle akan diisih dengan tetingkap tertua dahulu dan tetingkap terbaharu terakhir. Tetapi itu tidak berlaku: ia benar-benar rawak!
Oleh kerana windowhandle ialah GUID, kami akhirnya mencipta kamus dengan WindowHandle GUID sebagai kunci dan nilai sebagai nilai untuk jenis halaman yang dimuatkan dalam tetingkap penyemak imbas. Tetapi ini juga akan menyebabkan kamus dikekalkan apabila tetingkap ditutup.
Nampaknya banyak kerja untuk perkara yang begitu mudah. Adakah terdapat penyelesaian yang lebih baik?
P粉9869374572023-11-05 16:56:30
Anda betul sekali:
Dalam perbincangan, Simon dengan jelas menyebut:
Jadi kami akan naikkan WebDriverWait
,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened)
mengikut keperluan:
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"); } }
Keluaran konsol:
Working on Google Working on Facebook Working on Youtube Quit the WebDriver instance
Anda boleh mencari perbincangan berasaskan python di Buka Web Selenium + Python dalam tab baharu p>