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?

Author: Ripon Al Wasim, 2012-06-04

7 answers

WebDriver est driver.switchTo().frame() la méthode prend un des trois arguments:

  • Un numéro.

    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'index 1 et le troisième à l'index 2. Une fois que le cadre a été sélectionné, tous les appels suivants sur l'interface WebDriver sont effectués vers cette trame.

  • Un nom ou ID.

    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.

 47
Author: Petr Janeček, 2015-05-30 21:24:26

Pour switchto un cadre:

driver.switchTo.frame("Frame_ID");

Pour passer à nouveau à la valeur par défaut.

driver.switchTo().defaultContent();
 14
Author: user1710861, 2014-02-16 05:32:00

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();
 5
Author: ArunPaul, 2015-12-09 08:03:05

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;
}
 1
Author: chrismead, 2012-06-04 22:53:04

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()
 1
Author: Krish13287, 2014-08-12 07:17:15

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()
 1
Author: Pedro Lobito, 2015-03-26 08:50:49

Il est également possible d'utiliser WebDriverWait avec ExpectedConditions (pour s'assurer que le cadre sera disponible).

  1. Avec string comme paramètre

    (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame-name"));
    
  2. 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

 1
Author: rkarczmarczyk, 2017-02-10 15:21:45