对implicit
中的explicit
和wait
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对象的生命周期设置隐式等待 实例
但不清楚这是什么样的等待,我的意思是等到isDispalyed
,isVisible
或isClickable
答案 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,则说明准确无误。如果您想了解更多信息,可以查看其他方法的来源等,但我认为这足以回答您的问题。