gpt4 book ai didi

javascript - Protractor 测试不一致地通过/失败 AngularJS 应用程序

转载 作者:行者123 更新时间:2023-12-03 08:18:11 25 4
gpt4 key购买 nike

我的 Protractor e2e 测试不一致地通过和失败。

似乎这可能是由于异步 javascript 造成的,如下所述:
Protractor : How to wait for page complete after click a button? .

但是,这里提到 Protractor 测试自动按顺序/同步执行:
https://github.com/angular/protractor/issues/909

我的测试脚本:

describe('Login', function() {

var ptor;

beforeEach(function() {
browser.get('https://127.0.0.1:8443');
ptor = protractor.getInstance();
element(by.id('splash')).click();
browser.ignoreSynchronization = true; // <-- to proceed beyond splash screen
});

describe('with correct email and password', function() {

beforeEach(function() {
element(by.id('email')).sendKeys('admin@email.com');
element(by.id('password')).sendKeys('adminpassword');
element(by.id('loginButton')).click();
});

afterEach(function() {
ptor.findElement(by.id('logout')).then(function(elem) {
elem.click();
});
});

it('does not show alert', function() { // <-- sometimes passes, sometimes fails
expect(browser.isElementPresent(by.css('.alert-danger'))).toBe(false);
});

it('changes route to /admin', function() { // <-- sometimes passes, sometimes fails
expect(browser.getCurrentUrl()).toMatch(/\/admin/);
});
});
});

在上面的两个测试中,要么两个测试都通过,要么一个/两个测试都失败并显示以下消息:
Failures:

1) Login with correct email and password does not show alert
Message:
NoSuchElementError: no such element
...
==== async task ====
WebDriver.findElement(By.id("logout"))
...

或者
Failures:

1) Login with correct email and password changes route to /admin
Message:
NoSuchElementError: no such element
...
==== async task ====
WebDriver.findElement(By.id("logout"))
...

非常感谢您的想法/帮助。

最佳答案

我能够根据以下内容解决问题:

  • Avishay在这里关于添加 ptor.waitForAngular() 的回答:
    No element found using locator: by.model() error
  • 将 browser.get 更改为 ptor.get,如 Harri Siirak的答案在这里:
    Protractor times out waiting for sync with page when using $resource
  • juliemr在这里关于 ignoreSynchronization 是一个实例变量的评论,并将 browser.ignoreSynchronization=true 更改为 ptor.ignoreSynchronization=true:
    https://github.com/angular/protractor/issues/49
  • glepretre在这里关于使用 .then() 的回答:
    Protractor : How to wait for page complete after click a button?

  • 正如 Nguyen Vu Hoang 所述对原始问题的评论,我正在测试一个纯 Angular 应用程序,我认为它是纯 Protractor (没有 webdriver 调用)。我知道 ptor.ignoreSynchronization=true 在这种情况下不应该是必需的,但由于某种原因,如果没有此设置,测试不会在按钮单击时进行。

    我的新规范:
    describe('Login', function() {

    var ptor;

    beforeEach(function() {
    ptor = protractor.getInstance();
    ptor.ignoreSynchronization = true;
    ptor.waitForAngular();
    ptor.get('https://127.0.0.1:8443');
    ptor.findElement(by.id('splash')).then(function(elem) {
    elem.click();
    });
    });

    describe('with correct email and password', function() {

    beforeEach(function() {
    ptor.findElement(by.id('email')).then(function(elem) {
    elem.sendKeys('admin@email.com');
    });

    ptor.findElement(by.id('password')).then(function(elem) {
    elem.sendKeys('adminpassword');
    });

    ptor.findElement(by.id('loginButton')).then(function(elem) {
    elem.click();
    });
    });

    afterEach(function() {
    ptor.findElement(by.id('logout')).then(function(elem) {
    elem.click();
    });
    });

    it('does not show alert', function() {
    expect(ptor.isElementPresent(by.css('.alert-danger'))).toBe(false);
    });

    it('changes route to /admin', function() {
    expect(ptor.getCurrentUrl()).toMatch(/\/admin/);
    });
    });
    });

    关于javascript - Protractor 测试不一致地通过/失败 AngularJS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946840/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com