量角器等待命令无法等待引导模式出现



>场景:每当用户使用不正确的凭据登录时,引导模式都会显示 1-2 秒,并显示消息"抱歉,凭据不正确"。下面是模态的 HTML。

<div class="modal-content">
<div class="modal-body note-error text-center ng-binding"> Sorry, invalid credentials! </div>
</div>

我需要验证预期的错误文本是否等于实际的错误文本。

我的代码

页面对象.js

var errorModal = element(by.css('.modal-body.note-error.text-center.ng-binding'));
this.getErrorText = function(){
var until = protractor.ExpectedConditions;
browser.wait(until.textToBePresentInElement(errorModal, "Sorry, invalid credentials!"), 3000, "Not able to find");

     return errorModal.getText();
 };

规格.js

expect(Login_Page.getErrorText()).toMatch('Sorry, invalid credentials!');

输出

消息: 预期"匹配"对不起,凭据无效!

我不知道为什么这种等待不起作用。

我在查看您的 [应用程序] 后找到了问题的根本原因。您要查找的错误模态始终存在于dom中 - 这意味着isPresent()将始终返回 true。但它在无效输入上仅可见 1 或 2 秒 - 这意味着isDisplayed()将在几秒钟内返回true

这样做的副作用是返回值 getText() 。它只返回可见的内部文本。查看以下官方文档摘录

获取此元素的可见内部文本,包括子元素, 没有任何前导或尾随空格。可见元素不是 被 CSS 隐藏。

这就是您看到getText()的空值的原因

我建议一个解决方法,您可以通过browser.executeScript()提取内部文本

return browser.executeScript('return arguments[0].textContent',errorModal)替换return errorModal.getText(),你应该一切都好

让我知道这是否有效

这是

pittgoose作为 https://github.com/angular/protractor/issues/4030 的一部分提供的答案。我只是想在这里分享

好的,在每个 webdriver 动作量角器执行 browser.waitForAngular() 之前,它会等待所有角度脚本完成运行,然后再执行下一个动作。在这种情况下,我相信量角器在执行搜索之前正在等待弹出模态消失。

另外,我刚刚证明了我的理论,因为当我在browser.wait(...)之前添加browser.waitForAngularEnabled(false)时,测试通过了。前任:

browser.get('https://app.p3fy.com/#/login');
        element(by.css('[name="email"]')).sendKeys('pittgoose@sampleemail.com');
        element(by.css('[name="password"]')).sendKeys('blah');
        element(by.css('[type="submit"]')).click();
        browser.waitForAngularEnabled(false); // THIS MAKES THE TEST PASS
        browser.wait(ExpectedConditions.textToBePresentInElement(element(by.id('errorDialog')), 'Sorry, invalid credentials!'), 3000, 'No!');

这对于Selenium Webdriver api来说不是问题,因为它不会等待Angular加载。

最新更新