Comment basculer entre les images dans Selenium WebDriver en utilisant Java
J'utilise java avec WebDriver.J'ai pour basculer entre les deux images. J'ai enregistré le cas de test dans selenium ID et en cela j'ai obtenu les valeurs comme selectFrame relative=top select Frame=middle Frame
Mais il y a un problème, il n'est pas capable de reconnaître le relatif=top et middleFrame. Comment puis-je résoudre ce problème dans Selenium WebDriver avec Java?
7 answers
WebDriver est driver.switchTo().frame()
la méthode prend un des trois arguments:
-
Sélectionnez une image par son index (basé sur zéro). Autrement dit, si une page a trois frames, la première image serait à l'index
0
, la seconde à l'index1
et le troisième à l'index2
. Une fois que le cadre a été sélectionné, tous les appels suivants sur l'interface WebDriver sont effectués vers cette trame. -
Sélectionnez un cadre par son nom ou son ID. Cadres situés par nom correspondant les attributs ont toujours la priorité sur ceux qui correspondent à ID.
-
Précédemment trouvé
WebElement
.Sélectionnez un cadre à l'aide de son élément Web précédemment situé.
Obtenez le cadre par son id / nom ou localisez-le par driver.findElement()
et tu seras bon.
Pour switchto un cadre:
driver.switchTo.frame("Frame_ID");
Pour passer à nouveau à la valeur par défaut.
driver.switchTo().defaultContent();
Vous devez d'abord localiser l'id de trame et le définir dans un WebElement
Pour ex:- WebElement fr = driver.findElementById("id");
Puis passez au cadre en utilisant ce code:- driver.switchTo().frame("Frame_ID");
Un exemple de script:-
WebElement fr = driver.findElementById("theIframe");
driver.switchTo().frame(fr);
Then to move out of frame use:- driver.switchTo().defaultContent();
Ce code est en groovy, donc très probablement vous devrez faire quelques retouches. Le premier paramètre est une url, le second est un compteur pour limiter les essais.
public boolean selectWindow(window, maxTries) {
def handles
int tries = 0
while (true) {
try {
handles = driver.getWindowHandles().toArray()
for (int a = handles.size() - 1; a >= 0 ; a--) { // Backwards is faster with FF since it requires two windows
try {
Log.logger.info("Attempting to select window: " + window)
driver.switchTo().window(handles[a]);
if (driver.getCurrentUrl().equals(window))
return true;
else {
Thread.sleep(2000)
tries++
}
if (tries > maxTries) {
Log.logger.warn("Cannot select page")
return false
}
} catch (Exception ex) {
Thread.sleep(2000)
tries++
}
}
} catch (Exception ex2) {
Thread.sleep(2000)
tries++
}
}
return false;
}
Vous devez vous assurer qu'une fois commuté dans une trame, vous devez revenir au contenu par défaut pour accéder aux éléments Web dans une autre trame. Comme Webdriver ont tendance à trouver le nouveau cadre à l'intérieur du cadre actuel.
driver.switchTo().defaultContent()
Vous pouvez également utiliser:
driver.switch_to.frame(0)
(0)
être le premier iframe sur le html.
Pour revenir au contenu par défaut:
driver.switch_to.default_content()
Il est également possible d'utiliser WebDriverWait avec ExpectedConditions (pour s'assurer que le cadre sera disponible).
-
Avec string comme paramètre
(new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame-name"));
-
Avec le localisateur comme paramètre
(new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame-id")));
Plus d'infos peuvent être trouvées ici