我正在使用Haskell WebDriver client编写测试。
我有一个页面 - 当它最初加载时 - 包含几个"面板加载"动画元素。在开始与页面交互之前,我想等待这些元素消失。 如何使用Test.WebDriver.Commands.Wait表达此逻辑?
换句话说,我想使用Java WebDriver的API表示以下代码的Haskell等价物
private void waitForPageLoad() {
new WebDriverWait(driver, 15/*wait timeout in seconds*/, 100/*poll interval in miliseconds*/)
.until(ExpectedConditions.not(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".panel_loading")));
}
..以便我以后可以在WD monad中使用它,如:
doStuff :: WD ()
doStuff = do
openPage "blabla"
waitForPageToLoad -- how to define this?
input <- findElem $ ById "someID"
--etc...
答案 0 :(得分:2)
我实际上没有运行它,但以下代码类型检查。
要等到没有类“panelLoading”的元素,请尝试类似:
doStuff' :: WD ()
doStuff' = do
openPage "blabla"
waitWhile 30 $ findElem (ByClass "panelLoading")
...
说明:
waitUntil
将重复操作,直到成功为止。一个示例(来自onTimeout
文档)等待有一个元素具有CSS类“class”然后返回其文本:
waitUntil 5 (getText <=< findElem $ ByCSS ".class")
findElem
如果失败则会抛出NoSuchElement
例外。
waitWhile
会反转等待条件,因此您可以将其与findElem
结合使用,等待某个类/ css选择器等没有元素。
您可以使用unexpected
创建自定义等待条件,例如:
-- wait until there are an even number of elements having class "class"
waitUntil 5 $ do elems <- findElems $ ByCSS ".class"
if (odd (length elems))
then unexpected "odd number of elements"
else return ()
另请参阅waitUntil'
和waitWhile'
以控制投票频率。