Mécanismes d'attente communs au sélénium et leurs caractéristiques et méthodes d'utilisation

Table des matières

1. Attente forcée 

2. Attente implicite 

3. Affichage en attente 


1. Attente forcée 

L'attente forcée est obtenue en appelant directement Thread.sleep(timeout) dans le programme. L'avantage de cette méthode est qu'elle est facile à utiliser et la syntaxe est relativement simple. L'inconvénient est qu'elle doit être forcée à attendre un délai fixe. temps, ce qui peut rendre le test trop long. .

    private static void test02() throws InterruptedException {
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        webDriver.findElement(By.cssSelector("#su")).click();
        webDriver.findElement(By.cssSelector("#kw")).clear();
        sleep(3000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("前端vue");
        webDriver.findElement(By.cssSelector("#su")).click();

    }

La raison pour laquelle l'attente est introduite est que dans de nombreux cas, la vitesse d'exécution du programme est supérieure à la vitesse de rendu de la page Web, un mécanisme d'attente doit donc être introduit. 

2. Attente implicite 

Si le temps d'attente est de 1 jour, l'utilisation de l'attente forcée attendra 1 jour. Pour l'attente implicite, elle attendra jusqu'à 1 jour. Car si nous obtenons les éléments de la page dans ce jour, alors l'attente implicite n'attendra plus, mais commencera directement à exécuter le code suivant. Si l'élément de page n'a pas été obtenu depuis plus d'un jour, une erreur sera signalée.

Déclarations utilisées :

webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);

 Pour utiliser l'attente implicite, vous devez utiliser la méthode manage dans le pilote, puis appeler la méthode implicitlyWait de la méthode timeouts.

Le plus important est implicitementWait. Vous pouvez jeter un oeil à son code source :

Vous pouvez voir qu'un paramètre de la méthode implicitlyWait est de type long, qui est le nombre spécifié, et ce dernier est de type TimeUnit, qui est l'unité spécifiée.

Ici, nous le testons avec du code réel :

private static void test02() throws InterruptedException {
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        webDriver.findElement(By.cssSelector("#su")).click();
        webDriver.findElement(By.cssSelector("#kw")).clear();
        //sleep(3000);
        //隐式等待1天
        webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("前端vue");
        webDriver.findElement(By.cssSelector("#su")).click();

    }

Nous avons prévu d'attendre un jour, mais pour l'attente implicite, le programme se termine en une seule fois. Étant donné que les éléments en attente sont obtenus directement à partir de la page, il n'est pas nécessaire d'attendre 1 jour pour terminer le test.

3. Affichage en attente 

Par exemple, sur la page d'accueil de la recherche Baidu, nous devons déterminer si l'élément inférieur est un lien hypertexte et s'il est possible de cliquer dessus. 

Cliquez sur cette méthode et vous pouvez voir qu'il existe de nombreuses méthodes pour juger les éléments. Ce que nous voulons utiliser, c'est juger si l'élément peut être cliqué, nous utilisons donc la méthode elementToBeClickable.

    private static void test07() {
        //创建驱动
        WebDriver webDriver=new ChromeDriver();
        //打开百度
        webDriver.get("https://www.baidu.com/");
        //判断元素是否可以被点击
        WebDriverWait webDriverWait=new WebDriverWait(webDriver,3000);
    webDriverWait.until(ExpectedConditions.elementToBeClickable
                (By.cssSelector("#bottom_layer > div > p:nth-child(7) > a")));

    }

Aucune erreur n'est signalée, indiquant que les conditions sont remplies. Si nous définissons un élément qui n'existe pas, et attendons que le temps d'attente défini soit écoulé, une erreur NoSuchElementException sera signalée :

en conclusion:

La syntaxe de l'attente d'affichage est relativement compliquée, mais vous pouvez spécifier un certain élément à attendre, ce qui réduit le temps d'attente de l'ensemble du test.

Je suppose que tu aimes

Origine blog.csdn.net/m0_67995737/article/details/132166503
conseillé
Classement