2016-05-07 145 views
0

请帮助我理解以下问题。请。有条件的等待vs隐含等待 - 硒

我必须得到所有链接并稍后检查。我用下面的代码:

open(url); 
List<String> links = new ArrayList<>(); 
for (SelenideElement link : $$("a")) 
    links.add(link.attr("href")); 

,当我与这些版本的API使用本使用Linux: Maven的3.1 硒V3.5 硒v2.53 火狐v45.0.1 然后代码不能花时间足以捕获来自页面的链接。然后,我必须在获取链接之前添加驱动程序等待。 我添加以下(这是有条件的等待):

WebDriverWait waitLog = new WebDriverWait(WebDriverRunner.getWebDriver(), 20); 
waitLog.until(ExpectedConditions.visibilityOf($(By.tagName(Selector)))); 

它工作得很好,我运行一个以上的时间。

昨天运行时,我感到很惊讶,它没有工作,并没有足够的时间来获得链接!

所以我替换隐等待条件等待,并添加以下内容:

WebDriverRunner.getWebDriver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  

现在是工作的罚款。

  • 发生了什么事?

  • 这是什么让它有时有时工作,有时不能工作?

  • 如何返回到有条件的等待,保持代码正常工作?

那么如何恢复这个问题呢?并防止这个问题在未来发生。

回答

0

第二次加载url可能会有一些延迟。请尝试增加有条件等待的延迟时间。显式和隐式等待的主要区别如下。

显式或有条件的等待将WebDriver停止指定的时间,直到提到的元素可用。而隐式等待将跳过对指定时间的执行WebDriver,对于在页面上未找到的每个元素。

希望这会有所帮助。