我在量角器的等待中遇到了一些问题。例如,我正在加载的页面之间导航,然后需要单击一个按钮。但是,有时,按钮会在加载消失之前出现。因此量角器单击该按钮,位于加载的后面,并且该按钮没有任何作用,因为加载位于屏幕上。 那么,如何使用这种等待呢?
我一直在尝试:
EC.invisibilityOf(loading)
.then(() => {
EC.elementToBeClickable(button)
.then(() => {
browser.actions().mouseMove(button).click().perform();
});
});
});
答案 0 :(得分:2)
您应该为常规等待创建一些辅助方法。 假设您将具有以下等待功能:
async waitForDisplayed(element: ElementFinder, timeout = 20000): Promise<boolean> {
try {
return await browser.wait(element.isDisplayed());
} catch (error) {
return false;
}
}
假设具有上述功能,则可以等待元素显示。结合检查页面是否仍在加载的功能非常有用。
要创建确定页面是否仍在加载的函数,您将必须搜索页面加载时显示的某些元素或显示为最新元素的元素。在我们的测试套件中,我们正在等待微调器消失。
等待页面加载的示例:
async function waitForTestability(timeout = 20000): Promise<boolean> {
let spinner = element(by.css('.spinner'));
try {
await browser.wait(async function () { return !await spinner.isDisplayed(); });
return true;
} catch (error) {
return false;
}
}
然后,您可以使用waitForDisplayed()
函数来修改waitForTestability()
函数,因此,每当您使用waitForDisplayed()
时,都会首先测试页面是否仍在加载:
async waitForDisplayed(element: ElementFinder, timeout = 20000): Promise<boolean> {
try {
await waitForTestability();
await browser.wait(element.isDisplayed());
return true
} catch (error) {
return false;
}
}
欢呼!
答案 1 :(得分:0)
您是否试图在单击之前使浏览器进入睡眠状态?
browser.sleep(2000);
答案 2 :(得分:0)
尝试通过以下方式等待元素:
describe