量角器-尽管使用ExpectedConditions.elementToBeClickable,但输入不可单击

时间:2018-12-12 13:55:43

标签: angular ionic-framework protractor cucumber

我正在尝试使用Protractor测试Ionic应用程序,并且在页面对象中尝试尝试单击复选框的代码如下:

  async shareWithPerson(name): Promise<void> {
    var input = this.inputWithName(name)
    await browser.wait(ExpectedConditions.invisibilityOf($('.toast-message')), 5000);
    await browser.wait(ExpectedConditions.invisibilityOf($('ion-backdrop')), 5000);
    await browser.wait(ExpectedConditions.elementToBeClickable(input), 5000);
    return input.click();
  }

  inputWithName(name): ElementFinder {
    var xpath = `//ion-label/div/span[@class="text"][contains(text(),'${name}')]/ancestor::ion-item/ion-checkbox`
    return element(by.xpath(xpath));
  }

但是,无论我怎么努力,我总是会收到错误消息:

unknown error: Element <button ion-button="" ion-item="" class="button-full-width float-right">...</button> is not clickable at point (897, 369). Other element would receive the click: <ion-backdrop tabindex="-1" class="backdrop-no-tappable hydrated" style="opacity: 0; will-change: opacity; transition-duration: 200ms; transition-timing-function: ease-in-out;"></ion-backdrop>

尽管我一直希望背景是不可见的,但我正在等待该元素可单击。我可以使用browser.sleep(3000)来解决这个问题,但我宁愿不要插手熟睡来解决这个问题。我要去哪里错了?

3 个答案:

答案 0 :(得分:0)

尝试链接perform方法以单击。

input.click().perform();

答案 1 :(得分:0)

由于本质上DOM中元素的存在是一个更严格的检查,因此我将尝试检查该元素而不是元素的可见性:

await browser.wait(ExpectedConditions.stalenessOf($('ion-backdrop')), 5000);

参考:stalenessOf

这仍然是黑暗中的镜头,因为我记得有必要将所有这些“小” browser.sleep()呼叫放在这里和那里以解决类似的计时问题。

答案 2 :(得分:0)

此错误是因为元素在网页上,但量角器无法看到该元素。尝试滚动到特定元素,然后执行单击操作。

示例: browser.executeScript(“ arguments [0] .scrollIntoView(); arguments [0] .click;”,inputElement);