我正在尝试使用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)
来解决这个问题,但我宁愿不要插手熟睡来解决这个问题。我要去哪里错了?
答案 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);