Selenium webdriver代码需要时间来循环退出

时间:2016-03-07 04:40:37

标签: java selenium selenium-webdriver

我的代码有效,但是当while循环中断时,执行while循环下面的内容需要20秒。

以下是代码:

driver.manage().timeouts().pageLoadTimeout(3, TimeUnit.SECONDS);
    try {
        driver.get("website");
    } catch (TimeoutException e) {

        String x = driver.findElement(By.cssSelector("b")).getText();



        driver.get("website");
        driver.findElement(By.id("479510558845313")).sendKeys(InstagramAievx.spamusernameinput);        driver.findElement(By.id("263795143794707")).sendKeys(InstagramAievx.spamcommentinput);

        driver.findElement(By.id("u_0_4")).sendKeys(x);
        driver.findElement(By.id("u_0_5")).click();
        while (true){
            WebElement button = null;
            try {
              button = driver.findElement(By.cssSelector("a[action='cancel']"));
            } catch (NoSuchElementException ex){
              break; 
            }
            if (button.isDisplayed() == false) {
              break;
            }

            driver.navigate().refresh();

            TimeUnit.SECONDS.sleep(5);
            driver.findElement(By.id("479510558845313")).sendKeys(InstagramAievx.spamusernameinput);

            driver.findElement(By.id("263795143794707")).sendKeys(InstagramAievx.spamcommentinput);

            driver.findElement(By.id("u_0_4")).sendKeys(x);
            driver.findElement(By.id("u_0_5")).click();
        }

        killFirefox();
    }

知道造成这种~20秒延迟的原因。

1 个答案:

答案 0 :(得分:0)

减少隐式等待超时持续时间不是一个好的解决方案。你的代码中的问题是你的findElement()等待你设置的任何隐式等待持续时间,如果元素不存在则没用,所以这也不是一个好的解决方案。

如果您希望元素不存在(甚至可能不存在),暂时禁用隐式等待有时是个好主意。

在这种情况下,您已经在findElement()循环开始之前已经进行了一些while调用,因此此时不再需要隐式等待,因为您可以确定该文档已经存在已装载。因此,您可以将隐式等待设置为while循环之前的0秒,然后再设置为30秒,您就可以了。