【问题标题】:protractor angular app browser.wait does not wait for element量角器角度应用程序 browser.wait 不等待元素
【发布时间】:2020-07-03 05:33:24
【问题描述】:

我正在检查错误的登录消息。我正在使用带有 browser.wait 的异步规范来等待元素出现在 DOM 中。 但它没有按预期工作。 如果元素不存在,我希望它等待给定的超时。 但是规范很快失败,并显示元素不存在的消息。 这没有道理。如果它真的不存在,它应该等待它并在超时后失败。

it("reports wrong login",  async () => {
    browser.waitForAngularEnabled(false);
    await username.clear(); //clear as it may be filled already with something
    await password.clear(); //clear as it may be filled already with something
    await username.sendKeys("wrongemail");
    await password.sendKeys("wrongpass");
    await submitButton.click();

    let errorTextElement = element(by.css(".has-remote-error > small"));
    let until = protractor.ExpectedConditions;
    browser.wait(until.presenceOf(errorTextElement), 5000, "error message element not found in DOM");
    let errorText = await errorTextElement.getText();

    //CHECKS
    expect(errorText).toEqual("Your email address or password is incorrect!");

})

我厌倦了我发现的几种方法。这似乎是正确的方法。为什么这不起作用?

这是失败的测试消息:

Failed: No element found using locator: By(css selector, .has-remote-error > small)

usign protractor version 5.4.3 direct connect chrome 80.0.3987.149 on Mac OS X

其实这里是配置

// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/docs/referenceConf.js

const HtmlReporter = require('protractor-beautiful-reporter');

exports.config = {
    allScriptsTimeout: 30000,
    specs: [
        './e2eTests/**/*.e2e-spec.ts'
    ],
    capabilities: {
        'browserName': 'chrome'
    },
    directConnect: true,
    baseUrl: 'http://localhost:4200/',
    framework: 'jasmine',
    SELENIUM_PROMISE_MANAGER: false,
    // Options to be passed to Jasmine.
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function() {}
    },
    useAllAngular2AppRoots: true,
    beforeLaunch: function() {

    },
    onPrepare: function() {
        require('ts-node').register({ project: 'e2eTests/tsconfig.e2e.json' });

        // Add a screenshot reporter:
        jasmine.getEnv().addReporter(new HtmlReporter({
            preserveDirectory: false,
            takeScreenShotsOnlyForFailedSpecs: true,
            screenshotsSubfolder: 'images',
            jsonsSubfolder: 'jsons',
            baseDirectory: 'e2eTests/reports',
            clientDefaults:{
                useAjax:false,
                totalDurationFormat:'hms',
                showTotalDurationIn: 'header'
            }
        }).getJasmine2Reporter());


    }
};


【问题讨论】:

  • 你能添加这个错误信息的 html 吗?从错误可以理解定位器是错误的
  • 你的意思是登录页面的html?它是动态角度应用程序。在测试运行时它不存在。关键是等待它是否出现在 DOM 中,如果它没有出现则测试失败,但它必须等待它。要么它不等待,要么它确实可以在 DOM 中找到它,但是它报告一个元素不存在的错误......这两种方式都没有意义

标签: angular selenium selenium-webdriver protractor


【解决方案1】:

将waitForAngularEnabled设置为true,然后尝试

it("reports wrong login",  async () => {
    browser.waitForAngularEnabled(true);
    await username.clear(); //clear as it may be filled already with something
    await password.clear(); //clear as it may be filled already with something
    await username.sendKeys("wrongemail");
    await password.sendKeys("wrongpass");
    await submitButton.click();

    let errorTextElement = element(by.css(".has-remote-error > small"));
    let until = protractor.ExpectedConditions;
    browser.wait(until.presenceOf(errorTextElement), 5000, "error message element not found in DOM");
    let errorText = await errorTextElement.getText();

    //CHECKS
    expect(errorText).toEqual("Your email address or password is incorrect!");

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多