Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 如何等待Vue完成处理?_Selenium_Selenium Webdriver_Vue.js_Webdriver_Webdriverwait - Fatal编程技术网

Selenium 如何等待Vue完成处理?

Selenium 如何等待Vue完成处理?,selenium,selenium-webdriver,vue.js,webdriver,webdriverwait,Selenium,Selenium Webdriver,Vue.js,Webdriver,Webdriverwait,我正在使用Selenium来测试网页,有时它会变得不可靠,因为它仍在处理“Vue”,代码开始在屏幕上查找元素。但我应该等到vue完成加载 如何等待Vue完成处理 例如,在加载时,我可以看到vue标记: 通过自定义vue标记不存在的预期条件,这种方法可能值得尝试: protected void waitForTagNonExistence(WebElement element) { WebDriverWait wait = new WebDriverWait(getDriver(), EL

我正在使用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;
            }
        }
    });
} 
受保护的void waitForTagNonExistence(WebElement元素){
WebDriverWait wait=新的WebDriverWait(getDriver(),元素\等待\超时\秒);
等待.直到(新的ExpectedCondition(){
公共布尔应用(WebDriver驱动程序){
试一试{
返回(element.getAttribute(“v-touch:tap”)==null);
}捕获(NullPointerException NullPointerException){
返回false;
}
}
});
} 

您可以将
wait
函数与以下
xPath
一起使用:

driver.wait(until.elementIsClickable(By.xpath("//img[not(@v-on:click = 'drop') and @src = 'img/end_call.svg']")), 15000);
xPath使用
而不是
not
表示将选择不带
@v-on:click='drop'
属性的元素
是使用
@src='img/end\u call.svg'
选择一个元素,而不是使用
@v-on:click='drop'

可以找到有关xPath运算符的更多信息。

从功能上讲,Selenium不直接依赖于AUT1是通过、还是构建的。从Selenium的角度来看,最重要的是您希望与之交互的WebElement的不同状态(如下所述):

  • 出席
  • 可见
  • 可交互(即可点击)
因此,基本上,您需要诱导服务员,即WebDriverWait,使所需元素处于所需状态,如下所示:

  • :

  • :

  • :

根据您共享的HTML,等待所需元素可单击,您可以使用以下解决方案:

browser.wait(until.elementIsClickable(By.xpath("//img[@src='img/end_call.svg']")), 20);
1正在测试的应用程序


更新 根据您的评论更新,如果元素变得可交互我在发送
字符序列
时没有看到任何障碍。但是,如果在Vue完成处理后
字符序列
消失,我们可以将
预期条件
用作


在这里,您可以在

中找到关于JavaScript
\uuuu doPostBack
的类似讨论。您是否询问等待特定元素或整个页面?任何情况都适合我。我想找到一个元素,但要等到它上面没有“vue”标记为止。@AutomatedOwl你说得对。我已改为可点击。感谢您的反馈。很抱歉,我仍然应该等待Vue完成处理,因为页面一旦完成就会刷新(这是第一种情况)。因此,如果Selenium在刷新完成之前获取元素,它可能会不稳定。@alansiqueira27检查我的答案更新,并告诉我这是否回答了您的问题。
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);
browser.wait(until.elementIsClickable(By.xpath("//img[@src='img/end_call.svg']")), 20);