我知道Java中有多种等待类型
隐性等待-
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)
明确等待-
WebDriverWait wait = new WebDriverWait(driver, explicitWaitSec);
wait.until(ExpectedConditions.elementToBeClickable(element));
流利等待-
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
,但是我感到困惑的是,哪种等待和期望条件将最接近Robot Framework中的Wait Until Page Contains
关键字?
答案 0 :(得分:2)
没有直接的模拟,这是在Robot Framework中明确开发的功能。
同时,您可以使用ExpectedCondition的presenceOfElementLocated()进行显式/流畅的等待(后者只是第一个的可定制版本,btw)。
对于定位器,请使用以下xpath:
//*[contains(., "Your Text Here")]
这是Robotf Framework actually does,我必须承认,这很聪明。
答案 1 :(得分:1)
Wait Until Page Contains是 wait 等待text
出现在HTML DOM中的实现。它记录为:
Keyword Arguments Documentation
------- --------- -------------
Wait Until Page Contains text, timeout=None, error=None Waits until text appears on current page.
Fails if timeout expires before the text appears. See the Timeouts section for more information about using timeouts and their default value.
error can be used to override the default error message.
源代码:
@keyword
def wait_until_page_contains(self, text, timeout=None, error=None):
"""Waits until ``text`` appears on current page.
Fails if ``timeout`` expires before the text appears. See
the `Timeouts` section for more information about using timeouts
and their default value.
``error`` can be used to override the default error message.
"""
self._wait_until(lambda: self.is_text_present(text),
"Text '%s' did not appear in <TIMEOUT>." % text,
timeout, error)
因此等效的ExpectedConditions可以是以下任意一项:
textToBePresentInElement(WebElement element, java.lang.String text)
:期望检查指定元素中是否存在给定文本。textToBePresentInElementLocated(By locator, java.lang.String text)
:期望检查是否在与给定定位符匹配的元素中存在给定文本。textToBePresentInElementValue(By locator, java.lang.String text)
:期望检查指定元素的value属性中是否存在给定的文本。textToBePresentInElementValue(WebElement element, java.lang.String text)
:期望检查指定元素的value属性中是否存在给定的文本。 注意:一个明显的不同是,wait_until_page_contains
与当前页面相关,即当前DOM Tree,{{1} }基于当前页面上的 WebElements ,这使您的测试更加精细。
答案 2 :(得分:0)
有更多类似的功能,但是这三个功能最多。
Wait Until Element Is Enabled
假定该元素存在于页面上,并且将等待直到该元素被启用(非只读且未被禁用)。如果该元素不存在,它将立即失败(或在超时后,如果您有隐式等待)
Wait Until Element is Visible
假定该元素存在于页面上,并将等待直到该元素可见。如果该元素不存在,它将立即失败(或在超时后,如果您有隐式等待)
Wait Until Page Contains Element
不对该元素做任何假设。它等待直到元素实际在页面上,无论它是可见,不可见,启用还是禁用。不需要隐式等待,因为此关键字是显式等待。
最完整的解决方案是等待它出现在页面上,等待它可见,然后等待它启用。
如果该元素始终位于页面上,则可以跳过第一个检查(即:是否没有javascript
可以创建或删除该元素)。
如果将始终启用该元素,则无需等待其启用(即:如果没有javascript
可以禁用或启用该元素)
对于简单的静态页面,实际上只需要检查一个元素是否可见。甚至这通常不是必需的,因为硒不会在打开页面之前从打开页面返回。当页面是动态的时,问题就来了。也就是说,加载HTML之后,javascript
可以更改页面上的内容以及该页面的可见或启用状态。
否,因为“加载”在不同的应用程序中可能具有不同的含义。完成加载html后,浏览器会将变量document.readyState
设置为“ complete
”。您可以使用诸如等待条件return window.document.readyState === 'complete'
之类的方法在机械手中进行检查。同样,如果您有javascript
在该页面上运行,这可能还不够,因为在初始HTML
加载后页面可能会更改。