我正在为Angular 7.x应用运行E2E测试。该测试直接在我的本地计算机上运行。但是,当我将其推入仓库(GitLab)时,管道会失败并引发以下错误:
用户个人资料-检查并更改个人资料 -失败:元素不可交互 (会议信息:chrome = 71.0.3578.80) (驱动程序信息:chromedriver = 2.45.615279(12b89733300bd268cff3b78fc76cb8f3a7cc44e5),platform = Linux 4.14.74-coreos x86_64)
测试用例:
it('USER PROFILE - Check and change PROFILE', () => {
page.navigateTo();
browser.sleep(1000);
expect(page.getProfileEditTagName()).toMatch('app-edit-profile');
expect(element(by.className('logged-as')).getText()).toBe( testEmail );
browser.actions().mouseMove( element.all( by.id('editIcon-salutation') ).get(0)).click().perform().then(function () {
browser.sleep(4000);
element( by.className('mat-select-arrow') ).click().then(function () {
browser.actions().mouseMove( element.all(by.className('option-value mat-option')).get(0)).click().perform();
browser.sleep(1000);
browser.actions().mouseMove( element.all( by.id('saveButton-salutation') ).get(0)).click().perform();
browser.sleep(1000);
});
});
});
navigateTo()
只是 profile.po.ts 中的一种方法:
navigateTo() {
browser.get('/profileComponentUrl');
}
让我感到困惑的是,我什至无法本地化错误或出了什么问题,是因为它可以在本地正常工作。但是一旦我推送回购,那么它在该测试用例中就完全失败了。有提示吗?
答案 0 :(得分:1)
我建议:
new SpecReporter({ spec: { displayStacktrace: true } })
中启用stacktrace,以便您可以确切地看到引发错误的元素。这不会解决问题,但至少应该为您指明正确的方向。browser.sleep(100)
后添加.click()
答案 1 :(得分:0)
原因元素不可交互的原因可能是-对隐藏或模糊的元素执行操作。
您可以尝试- 1.在by.className('mat-select-arrow')).click()之后添加睡眠,因为我看到您尚未在其中添加任何等待。 2.尝试检查是否以相同的屏幕分辨率在本地计算机和Jenkins计算机上运行测试。 (这可能是元素模糊的原因)
答案 2 :(得分:0)
我发现的一个原因是滚动问题。您需要检查元素是否正确显示。它可能是隐藏的。因此,使用scrollToTop / scrollToElement / scrollToElementView等。您可以编写不同的滚动方法来更好地适应条件。
另一个原因是定位器。尝试更换定位器,切勿修剪太多。只需尝试使用全身css定位器,如果它可以正常工作,则可以正确修剪。在chrome控制台中,有时可能会起作用,但不适用于测试用例。
答案 3 :(得分:0)
我遇到同样的问题,发现this。
我复制粘贴了该内容(以及其他一些小调整,例如在for循环中强制单击了上一页),并且它起作用了。我相信browser.driver.manage().window().maximize();
是解决方案的一部分。