我的代码有效,但是当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秒延迟的原因。
答案 0 :(得分:0)
减少隐式等待超时持续时间不是一个好的解决方案。你的代码中的问题是你的findElement()
等待你设置的任何隐式等待持续时间,如果元素不存在则没用,所以这也不是一个好的解决方案。
如果您希望元素不存在(甚至可能不存在),暂时禁用隐式等待有时是个好主意。
在这种情况下,您已经在findElement()
循环开始之前已经进行了一些while
调用,因此此时不再需要隐式等待,因为您可以确定该文档已经存在已装载。因此,您可以将隐式等待设置为while
循环之前的0秒,然后再设置为30秒,您就可以了。