3

我正在使用 Selenium 测试网页,有时它会变得不可靠,因为它仍在处理“Vue”并且代码开始在屏幕上查找元素。但我应该等到 vue 完成加载。

我怎样才能等到 Vue 完成处理?

例如,在加载时,我可以看到 vue 标签:

在此处输入图像描述

4

3 回答 3

2

通过自定义 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;
            }
        }
    });
} 
于 2018-07-04T21:20:25.470 回答
2

您可以使用以下wait功能xPath

driver.wait(until.elementIsClickable(By.xpath("//img[not(@v-on:click = 'drop') and @src = 'img/end_call.svg']")), 15000);

xPath 使用notandnot表示将选择没有@v-on:click = 'drop'属性的元素。and是选择一个带有@src = 'img/end_call.svg'但不带有的元素@v-on:click = 'drop'

更多关于xPath运营商的信息可以在这里找到。

于 2018-07-04T21:20:31.633 回答
1

在功能上,无论 AUT 1是通过Vue.jsReactJS还是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

于 2018-07-05T06:26:14.240 回答