Modifier le registre pour IE:
- HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main
- Cliquez avec le bouton droit de la souris → Nouveau → Valeur de chaîne → Nom de la valeur: TabProcGrowth (créer s'il n'existe pas)
- TabProcGrowth (clic droit) → Modifier ... → Données de la valeur: 0
Source: Problème de commutation de fenêtres Selenium WebDriver dans Internet Explorer 8-10
Dans mon cas, IE a commencé à détecter de nouvelles poignées de fenêtre après la modification du registre.
Tiré du blog MSDN:
Croissance du processus d'onglet: définit la vitesse à laquelle IE crée des processus de nouvel onglet.
L'algorithme "Max-Number": il spécifie le nombre maximum de processus de tabulation qui peuvent être exécutés pour une seule session d'isolement pour un processus de trame unique à un niveau d'intégrité obligatoire spécifique (MIC). Les valeurs relatives sont:
- TabProcGrowth = 0: les onglets et les cadres s'exécutent dans le même processus; les cadres ne sont pas unifiés entre les niveaux MIC.
- TabProcGrowth = 1: tous les onglets d'un processus de trame donné s'exécutent dans un processus d'onglet unique pour un niveau MIC donné.
Source: l' ouverture d'un nouvel onglet peut lancer un nouveau processus avec Internet Explorer 8.0
Options Internet:
- Sécurité → Décochez Activer le mode protégé pour toutes les zones (Internet, intranet local, sites de confiance, sites restreints)
- Avancé → Sécurité → Décochez Activer le mode protégé amélioré
Code:
Navigateur: IE11 x64 (Zoom: 100%)
OS: Windows 7 x64
Selenium: 3.5.1
WebDriver: IEDriverServer x64 3.5.1
public static String openWindow(WebDriver driver, By by) throws IOException {
String parentHandle = driver.getWindowHandle();
WebElement clickableElement = driver.findElement(by);
clickableElement.click();
WebDriverWait wait = new WebDriverWait(driver, 10);
boolean isChildWindowOpen = wait.until(ExpectedConditions.numberOfWindowsToBe(2));
if (isChildWindowOpen) {
Set<String> handles = driver.getWindowHandles();
for (String handle : handles) {
driver.switchTo().window(handle);
if (!parentHandle.equals(handle)) {
break;
}
}
driver.manage().window().maximize();
}
return parentHandle;
}
String parentHandle = Selenium.openWindow(driver, by);
driver.close();
driver.switchTo().window(parentHandle);
Le code ci-dessus comprend une vérification if pour vous assurer que vous ne passez pas à la fenêtre parente car Set<T>
aucun ordre n'est garanti en Java . WebDriverWait
semble augmenter les chances de succès comme le soutient la déclaration ci-dessous.
Cité de Luke Inman-Semerau : (Développeur pour Selenium)
Le navigateur peut prendre du temps pour accuser réception de la nouvelle fenêtre, et vous pouvez tomber dans votre boucle switchTo () avant que la fenêtre contextuelle n'apparaisse.
Vous supposez automatiquement que la dernière fenêtre renvoyée par getWindowHandles () sera la dernière ouverte. Ce n'est pas nécessairement vrai, car ils ne sont pas garantis pour être retournés dans n'importe quel ordre.
Source: Impossible de gérer une fenêtre contextuelle dans IE, le contrôle n'est pas transféré vers la fenêtre contextuelle
Articles Similaires: