我正在使用 Selenium 测试网页,有时它会变得不可靠,因为它仍在处理“Vue”并且代码开始在屏幕上查找元素。但我应该等到 vue 完成加载。
我怎样才能等到 Vue 完成处理?
例如,在加载时,我可以看到 vue 标签:
我正在使用 Selenium 测试网页,有时它会变得不可靠,因为它仍在处理“Vue”并且代码开始在屏幕上查找元素。但我应该等到 vue 完成加载。
我怎样才能等到 Vue 完成处理?
例如,在加载时,我可以看到 vue 标签:
通过自定义 vue 标签不存在的预期条件,也许这种方法值得尝试:
protected void waitForTagNonExistence(WebElement element) {
WebDriverWait wait = new WebDriverWait(getDriver(), ELEMENT_WAIT_TIMEOUT_SECONDS);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
try {
return (element.getAttribute("v-touch:tap") == null);
} catch (NullPointerException nullPointerException) {
return false;
}
}
});
}
您可以使用以下wait
功能xPath
:
driver.wait(until.elementIsClickable(By.xpath("//img[not(@v-on:click = 'drop') and @src = 'img/end_call.svg']")), 15000);
xPath 使用not
和and
。not
表示将选择没有@v-on:click = 'drop'
属性的元素。and
是选择一个带有@src = 'img/end_call.svg'
但不带有的元素@v-on:click = 'drop'
更多关于xPath
运营商的信息可以在这里找到。
在功能上,无论 AUT 1是通过Vue.js、ReactJS还是JavaScript构建的, Selenium都没有直接依赖关系。从Selenium的角度来看,最重要的是您想要与之交互的WebElement的不同状态(如下所述),如下所示:
present
visible
interactable (i.e. clickable)
因此,基本上您需要诱导一个服务员,即WebDriverWait以使所需元素处于您所需的状态,如下所示:
存在:
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be present on the dom.
browser.wait(EC.presenceOf($('#abc')), 5000);
能见度:
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be visible on the dom.
browser.wait(EC.visibilityOf($('#abc')), 5000);
var EC = protractor.ExpectedConditions;
// Waits for the element with id 'abc' to be clickable.
browser.wait(EC.elementToBeClickable($('#abc')), 5000);
根据您共享以等待所需元素可点击的HTML ,您可以使用以下解决方案:
browser.wait(until.elementIsClickable(By.xpath("//img[@src='img/end_call.svg']")), 20);
1被测应用
根据您的评论更新,如果元素变得可交互,我认为发送character sequence
. 但是,如果在Vue 完成处理后character sequence
消失,我们可以使用as stalenessOfExpectedConditions
在这里,您可以在如何通过 Selenium 和 WebDriver 等待 JavaScript __doPostBack 调用中找到关于JavaScript 的类似讨论__doPostBack