Java &引用;隐式等待“;等待元素可单击、显示或可见
在Java &引用;隐式等待“;等待元素可单击、显示或可见,java,selenium-webdriver,Java,Selenium Webdriver,在Selenium WebDriver中,存在关于隐式和显式等待之间差异的问题 在SeleniumHq上也有: 隐式等待 隐式等待是告诉WebDriver在尝试查找一个或多个元素时轮询DOM一段时间,如果 目前还无法立即获得。默认设置为0。一旦 设置时,将为WebDriver对象的生命周期设置隐式等待 例如 但不清楚这是什么样的等待,我的意思是它会等到isDisplayed、isVisible或isClickable我相信隐式等待并不关心这些属性中的任何一个(isDisplayed、isVi
Selenium WebDriver
中,存在关于隐式
和显式
等待
之间差异的问题
在SeleniumHq上也有:
隐式等待
隐式等待是告诉WebDriver在尝试查找一个或多个元素时轮询DOM一段时间,如果
目前还无法立即获得。默认设置为0。一旦
设置时,将为WebDriver对象的生命周期设置隐式等待
例如
但不清楚这是什么样的等待,我的意思是它会等到
isDisplayed
、isVisible
或isClickable
我相信隐式等待并不关心这些属性中的任何一个(isDisplayed、isVisible或isClickable)。它只是等待您设置的时间,并定期检查您尝试选择的元素在DOM中是否可用。如果找不到,它将启动超时错误。我相信隐式等待不关心这些属性中的任何一个(isDisplayed、isVisible或isClickable)。它只是等待您设置的时间,并定期检查您尝试选择的元素在DOM中是否可用。如果找不到它,它将引发超时错误。我相信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秒,然后等待元素出现。从
检查页面的DOM上是否存在元素的期望。这并不一定意味着元素是可见的
如果隐式等待等待的不是DOM中元素的存在,它将等待30秒。。。但当页面加载到浏览器中时,它就完成了
我做了一些研究,以更好地了解这些不同的功能在做什么,以及它们是如何真正不同的。这是我发现的
有三个与此问题相关的方法:IsDisplay()、isEnabled()和isSelected()。从文件中
isDisplayed()是否显示此元素?此方法避免了
必须解析元素的“style”属性的问题
isEnabled()元素当前是否已启用?这将
对于除禁用的输入元素之外的所有元素,通常都返回true
isSelected()确定是否选中此元素
这里也有几种方法。我将简要介绍元素tobelickable()
。从文件中
ElementToBickable检查元素是否可见的期望值
并已启用,以便您可以单击它
如果你看一下,描述是准确的。如果您想了解更多信息,可以查看其他方法的源代码,等等。但我认为这足以回答您的问题。我相信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秒,然后等待元素出现。从
检查页面的DOM上是否存在元素的期望。这并不一定意味着元素是可见的
如果隐式等待等待的不是DOM中元素的存在,它将等待30秒。。。但当页面加载到浏览器中时,它就完成了
我做了一些研究,以更好地了解这些不同的功能在做什么,以及它们是如何真正不同的。这是我发现的
有三个与此问题相关的方法:IsDisplay()、isEnabled()和isSelected()。从文件中
isDisplayed()是否显示此元素?此方法避免了
必须解析元素的“style”属性的问题
isEnabled()元素当前是否已启用?这将
对于除禁用的输入元素之外的所有元素,通常都返回true
isSelected()确定是否选中此元素
这里也有几种方法。我将简要介绍元素tobelickable()
。从文件中
ElementToBickable检查元素是否可见的期望值
并已启用,以便您可以单击它
如果你看一下,描述是准确的。如果您想了解更多信息,可以查看其他方法的来源等。但我认为这足以回答您的问题。可用是什么意思?您可以看到它,单击它或悬停??可用的意思是您可以在DOM中找到该元素。我指的是守则。在屏幕上不可见的事实并不意味着元素不存在于DOM中。您的意思是使用
.findelelement(By.\uuu u)
。我认为你应该引用一个例子来证明你的答案。我的意思是,如果你搜索一个按钮,定义这个按钮的HTML代码必须存在于你的DOM中。然后,您可以使用findElement
。网站的注销选项找到它。只有当您将鼠标悬停在配置文件图像上时,才能单击该选项。现在,此注销始终存在于DOM中,但在悬停之前它是隐藏的,悬停之后它是可单击的,即,findElement
在悬停之前失败。所以我认为只说“可用”是没有帮助的。你说可用是什么意思?您可以看到它,单击它或悬停??可用的意思是您可以在DOM中找到该元素。我指的是守则。在屏幕上不可见的事实并不意味着元素不存在于DOM中。您的意思是使用.findelelement(By.\uuu u)
。我认为你应该举出一个例子来证明你的答案