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?
Anda betul sekali:
Dalam perbincangan, Simon dengan jelas menyebut:
Jadi kami akan naikkan
WebDriverWait,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和switchTo().window(newly_opened)mengikut keperluan:Jawa:
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 s1 = driver.getWindowHandles(); Iterator 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 s2 = driver.getWindowHandles(); Iterator 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:
Lain-lain
Anda boleh mencari perbincangan berasaskanpythondiBuka Web Selenium + Python dalam tab baharup>