Meilleur moyen de suivre et de parcourir les onglets et les fenêtres à l'aide de WindowHandles à l'aide de Selenium
P粉744691205
P粉744691205 2023-11-04 18:03:14
0
1
570

Nous travaillons avec Selenium webdriver pour les tests d'interface utilisateur pour Internet Explorer 11. Dans l'application Web de test, plusieurs écrans apparaissent. Dans certains tests, nous nous sommes retrouvés avec trois fenêtres de navigateur et donc trois Driver.WindowHandles. Pour passer d'un WindowHandle à un autre, nous nous attendons à ce que Driver.WindowHandles soit trié avec la fenêtre la plus ancienne en premier et la fenêtre la plus récente en dernier. Mais ce n’est pas le cas : c’est complètement aléatoire !

Parce que windowhandle est un GUID, nous finissons par créer un dictionnaire avec le GUID WindowHandle comme clé et la valeur comme valeur pour le type de page chargé dans la fenêtre du navigateur. Mais cela entraînera également la maintenance du dictionnaire lorsque la fenêtre est fermée.

Cela semble demander beaucoup de travail pour une chose aussi simple. Existe-t-il une meilleure solution ?

P粉744691205
P粉744691205

répondre à tous (1)
P粉986937457

Vous avez tout à fait raison :

Dans une discussion, Simon a clairement mentionné :

Nous augmenterons doncWebDriverWait,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和switchTo().window(newly_opened)selon les besoins :

Java :

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"); } }

Sortie console :

Working on Google Working on Facebook Working on Youtube Quit the WebDriver instance

Autres

Vous pouvez trouver des discussions basées sursurOuvrir Web Selenium + Python dans un nouvel ongletp>

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!