我正在寻找一些建议。我已经使用量角器数周了,除非我使用browser.sleep,否则无法使我的测试保持一致。我已经尝试了辅助函数以及browser.wait(expectedCondition)。我极大地减少了browser.sleep的数量,但是量角器仍然可以快速运行。除非我有几个浏览器,否则我永远无法成功运行多个测试。睡眠只能使量角器放松一秒钟。这是一个例子: 测试,我需要选择一个用户,删除该用户,然后等待成功消息。然后,我单击同一用户,然后单击激活按钮。 结果:除非我具有browser.sleep,否则在删除/激活后,我的成功消息甚至都不会出现。测试失败,因为量角器的移动速度太快。即使符合预期条件。我的主要问题是量角器的角度网页很快。我已经尝试过ifCLickable或isDisplayed,但是它们不能完全解决问题。这是代码:
async deleteUser() {
await sendClick(this.getNewUser());
await sendClick(this.getDelete());
await waitTillPresent(this.getDeleteConfirm());
await sendClick(this.getDeleteConfirm());
await waitTillPresent(this.getSuccessMsg())
expect(await page.getSuccessMsg().isDisplayed()).toBeTruthy();
}
async activateUser() {
await sendClick(this.getNewUser());
await waitTillPresent(this.getEditBtn())
await sendClick(this.getActive());
await waitTillPresent(this.getSuccessMsg())
expect(await page.getSuccessMsg().isDisplayed()).toBeTruthy();
}
功能:
export async function sendClick(element: ElementFinder): Promise<boolean> {
try {
if(!await element.isDisplayed()) {
return false;
}
await browser.executeScript('arguments[0].click();', await element.getWebElement());
return true;
}
catch (err) {
return false;
}
}`
export async function waitTillPresent (element: ElementFinder, timeout: number = 10000) {
return browser.wait(() => {
return element.isPresent();
}, timeout);
}
我的问题:我可以正确处理吗?是否有更好的方法来确保我的测试是一致的?在进行这些测试之前,我访问了一个非角度的网页。因此,我必须添加行browser.waitForAngularEnabled(false)
这是否会影响角度的异步性质?谢谢。
答案 0 :(得分:1)
最近几个月,我在e2e测试套件上工作以使其稳定。我不相信这是可能的,但是我使用了正确的等待函数,有时甚至将browser.sleep()
作为最后的手段。
您有一种等待元素的正确方法。但是关于您的实现有两个问题:
1)函数waitTillPresent()
的功能恰如其名。但是,如果只等到元素出现在页面上,则并不意味着该元素可以单击或显示。元素可以隐藏并且同时仍然存在。请将waitTillPresent()
重命名为waitTillDisplayed()
并进行如下更改:
export async function waitTillDisplayed(element: ElementFinder, timeout: number = 20000): Promise<boolean> {
let result = await browser.wait(() => element.isPresent(), timeout);
if(!result) {
return false;
}
return await browser.wait(element.isDisplayed(), timeout);
}
2)您应该超过默认超时。将其设置得更高一些,例如20到25秒。随便玩吧。
不幸的是,我不知道browser.waitForAngularEnabled(false)
如何改变测试行为。我们不使用它:)
这些功能完全相同:
function foo() { return 'hello world'; }
var foo = () => { return 'hello world'; };
var foo = () => 'hello world';
玩箭头功能,它是语法糖。
欢呼和欢呼!