Bonnes pratiques pour une gestion efficace des fenêtres et onglets Selenium
Présentation
La gestion de plusieurs onglets et fenêtres peut être délicate lors de l'utilisation de Selenium WebDriver pour les tests d'interface utilisateur avec Internet Explorer 11. Afin de les suivre efficacement, il est crucial d’utiliser l’attribut WindowHandles
. Cependant, un problème courant se produit lorsque l’ordre attendu des handles de fenêtre est instable. Cet article explique comment résoudre ce problème et explorer des solutions plus efficaces.
Caractère aléatoire de l'ordre des poignées de fenêtre
Contrairement aux attentes, l'ordre de WindowHandles
n'est pas stable. L'implémentation de WebDriver les parcourt de manière arbitraire sans aucune garantie d'ordre d'insertion. Cela peut rendre difficile la gestion efficace de plusieurs fenêtres et le basculement entre elles.
Utiliser le dictionnaire pour la gestion
Une solution consiste à créer un dictionnaire en utilisant le WindowHandle
GUID comme clé et le type de page correspondant comme valeur. Cette approche garantit une commutation correcte entre les fenêtres. Cependant, cela nécessite un entretien supplémentaire, notamment lorsque la fenêtre est fermée.
Présentation de WebDriverWait
Une meilleure façon est d'utiliser WebDriverWait
. Cela vous permet de faire une pause avant de collecter WindowHandles
. En les collectant à chaque fois que vous ouvrez un nouvel onglet/fenêtre, vous pouvez créer une liste ordonnée et passer à la fenêtre souhaitée en utilisant switchTo().window(newly_opened)
.
Exemple de mise en œuvre
Ce qui suit est un exemple d'implémentation en 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.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 driver = new InternetExplorerDriver(); driver.get("http://www.google.com"); String first_tab = driver.getWindowHandle(); ((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(); String next_tab; while (i1.hasNext()) { next_tab = i1.next(); if (!first_tab.equalsIgnoreCase(next_tab)) { driver.switchTo().window(next_tab); } } } }</code>
Ce code ouvre automatiquement plusieurs onglets, attend qu'ils se chargent, puis passe à la fenêtre correspondante à l'aide d'une liste WindowHandles
ordonnée.
Conclusion
Bien que l'utilisation de dictionnaires pour la gestion des fenêtres soit possible, l'introduction de WebDriverWait
et de collections lors de la création de nouveaux onglets WindowHandles
fournit un moyen plus efficace et plus efficient de suivre et de parcourir plusieurs onglets et fenêtres dans la solution flexible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!