“隐式等待”等待元素可点击,显示或可见

时间:2015-09-17 13:21:50

标签: java selenium-webdriver

implicit中的explicitwait Selenium WebDriver之间的区别存在疑问。

What is difference between Implicit wait Vs. Explicit wait in selenium webdriver?

When to use explicit wait vs implicit wait in Selenium Webdriver?

在SeleniumHq上也是:

  

隐式等待

     

隐式等待是指在尝试查找一个或多个元素时,告诉WebDriver轮询DOM一段时间   它们不是立即可用的。默认设置为0.一次   set,为WebDriver对象的生命周期设置隐式等待   实例

但不清楚这是什么样的等待,我的意思是等到isDispalyedisVisibleisClickable

2 个答案:

答案 0 :(得分:0)

我认为隐式等待并不关心任何这些属性(isDisplayed,isVisible或isClickable)。它只是等待您设置的时间并定期检查您尝试选择的元素是否在DOM中可用。如果没有找到,则会出现超时错误。

答案 1 :(得分:0)

我相信narko是对的,我认为这是一些代码。

By hiddenLocator = By.id("csi");
FirefoxDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement hiddenEle = driver.findElement(hiddenLocator);
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(hiddenLocator));
System.out.println("done");

我去了google.com,发现了一个隐藏的元素

<textarea name="csi" id="csi" style="display:none"></textarea>

我将隐式等待设置为30秒,设置WebDriverWait 30秒,然后等待元素存在。来自the presenceOfElementLocated() source

  

期望检查页面的DOM上是否存在元素。这并不一定意味着该元素是可见的。

如果隐式等待除了DOM中元素的存在之外等待其他任何事情,它将等待30秒......但是一旦页面被加载到浏览器中就完成了。

我做了一些研究,以更好地了解这些不同功能正在做什么以及它们是如何真正不同的。这是我发现的......

WebElement有三个与此问题相关的方法:isDisplayed(),isEnabled()和isSelected()。来自文档...

  

isDisplayed()是否显示此元素?这种方法避免了   必须解析元素的“样式”属性的问题。

     

isEnabled()当前是否启用了元素?这将   除了禁用的输入元素之外,通常会返回true。

     

isSelected()确定是否选择了此元素。

ExpectedConditions也有几种方法在这里发挥作用。我将简要介绍elementToBeClickable()。来自文档...

  

elementToBeClickable检查元素的期望是可见的   并启用,以便您可以单击它。

如果查看the source,则说明准确无误。如果您想了解更多信息,可以查看其他方法的来源等,但我认为这足以回答您的问题。