web-dev-qa-db-fra.com

Comment passer d'une image à une autre dans Selenium WebDriver à l'aide de Java

J'utilise Java avec WebDriver.Je dois basculer entre deux cadres. J'ai enregistré le scénario de test dans Selenium IDE et j'ai obtenu les valeurs suivantes: selectFrame relative = top select Cadre = milieu Cadre

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?

30
Mallik

La méthode driver.switchTo().frame() de WebDriver utilise l'un des trois arguments possibles:

  • Un numéro.

    Sélectionnez une image par son index (base zéro). C'est-à-dire, si une page a trois cadres, la première image serait à index 0, la seconde à index 1 et le troisième à l’index 2. Une fois le cadre sélectionné, tout les appels suivants sur l'interface WebDriver sont effectués sur cette trame.

  • Un nom ou un identifiant.

    Sélectionnez un cadre par son nom ou son identifiant. Cadres localisés par nom correspondant les attributs ont toujours la priorité sur ceux appariés par ID.

  • Un WebElement trouvé précédemment.

    Sélectionnez un cadre à l'aide de son élément WebElement précédemment localisé.

Obtenez le cadre par son identifiant/nom ou localisez-le par driver.findElement() et tout ira bien.

48
Petr Janeček

passer à un cadre:

driver.switchTo.frame("Frame_ID");

pour revenir à la valeur par défaut.

driver.switchTo().defaultContent();
14
user1710861

Vous devez d’abord localiser l’identifiant du cadre et le définir dans un WebElement

Par exemple: - 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
ArunPaul

Vous devez vous assurer qu'une fois basculé dans un cadre, vous devez revenir au contenu par défaut pour accéder aux éléments Web dans un autre cadre. Comme Webdriver ont tendance à trouver le nouveau cadre dans le cadre actuel. 

driver.switchTo().defaultContent()
1
Krish13287

Ce code est groovy, vous devrez donc probablement le retravailler. Le premier paramètre est une URL, le second est un compteur pour limiter les tentatives.

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
chrismead

Vous pouvez aussi utiliser:

driver.switch_to.frame(0)

(0) étant le premier iframe sur le code HTML.

pour revenir au contenu par défaut:

driver.switch_to.default_content()
1
Pedro Lobito

Il est également possible d’utiliser WebDriverWait avec ExpectedConditions (pour s’assurer que Frame sera disponible). 

  1. Avec string comme paramètre

    (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frame-name"));
    
  2. Avec locator comme paramètre

    (new WebDriverWait(driver, 5)).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame-id")));
    

Plus d'informations peuvent être trouvées ici

1
rkarczmarczyk