【问题标题】:Protractor not waiting for page load量角器不等待页面加载
【发布时间】:2018-10-23 04:07:14
【问题描述】:

我使用量角器创建了一个基本测试来单击一个元素并在新页面上检查给定元素是否存在,但量角器似乎没有等待,它在单击之后但在新页面加载之前运行断言。我要查找的元素在两个页面上都可用,因此量角器在新页面加载之前会在旧页面上看到该元素。谁能告诉我我做错了什么?

it('should check when new page is loaded', function () {
button.click().then(function (){
    return expect(newElement).to.exist;
});

【问题讨论】:

  • 在每个页面上都有一些独特的东西来验证作为第一个项目,比如页面标题或其他东西。

标签: javascript asynchronous protractor


【解决方案1】:

首先,将“getPageTimeout”变量添加到您的量角器配置文件中。

如果您还没有使用它。这是根据您在应用程序中的平均页面加载时间设置全局页面超时。

conf.js

getPageTimeout: 120000,//change it based on your app response time

如果它没有帮助,那么在检查您正在寻找的实际元素之前验证下一页的页面标题(假设它与上一页不同)。

it('should check when new page is loaded', function () {
button.click().then(function (){
    browser.getCurrentUrl();
    browser.getTitle().then(function (title) {
            expect(title).toEqual('Next Page Title');
        });
   return expect(newElement.isDisplayed()).toBeTruthy();
});

即使这对您没有帮助,您也可以使用预期条件。有几个预定义的条件需要明确等待。如果您想等待某个元素出现:

var EC = protractor.ExpectedConditions;

var e = element(by.id('xyz'));
browser.wait(EC.presenceOf(e), 10000);

expect(e.isPresent()).toBeTruthy();

【讨论】:

    【解决方案2】:

    您可以在配置文件中使用以下方法

    jasmineNodeOpts: {
        showColors: true,
        includeStackTrace: true,
        defaultTimeoutInterval: 1440000
    },
    

    在 Spec 文件中,您可以根据页面和对象的可见性自定义等待时间

    browser.sleep(20000);

    如果您正确自定义等待时间,我希望上述方法在所有情况下都能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多