【问题标题】:browser.get returning before the given URL completely loads using Protractorbrowser.get 在使用 Protractor 完全加载给定 URL 之前返回
【发布时间】:2016-11-22 05:10:15
【问题描述】:

我正在使用 Protractor 和 Cucumber 来编写一些测试,但我在某些时候遇到了困难。在登录后的步骤中,我使用量角器提供的 browser.get(url) 函数重新路由到另一个页面。但它总是在页面完全加载之前返回。到目前为止,我已经尝试了很多解决方案,但没有运气。我已经尝试过 browser.wait, browser.get(url).then(function(){ // 加载时的代码}) 但我得到了 0 个积极的结果。

这是我的代码:

  // Steps will be implemented here
  this.Given(/^I am logged in as user \'([^\']*)\'$/, function (user, callback) {
    console.log('USER: ' + user);
    browser.driver.get('https://cit-was70-l06/ipa')
    browser.driver.findElement(by.xpath('my_xpath')).sendKeys(user);
    browser.driver.findElement(by.xpath('my_xpath')).sendKeys(user);
    browser.driver.findElement(by.xpath('my_xpath')).click().then(callback);
  });

  this.Then(/^The screen is shown, with title \'([^\']*)\'$/, function (title, callback) {
    console.log('Title from feature file: ' + title);
    var url = 'some/url/in/application/';
    browser.get(url).then(function(){
      // This portion executes before page is completely loaded.
      // So if I try to get any element, it throws me an error.
      // [15:32:13] E/launcher - "process.on('uncaughtException'" error, see 
      // launcher
      // [15:32:13] E/launcher - Process exited with error code 199
      // It works if I add static delay to wait for page load completely
      // but that will not be a good solution if I have too much pages to test
      callback();
    });
    console.log('After page laoad');
  });

任何建议的解决方法将不胜感激。

【问题讨论】:

标签: angularjs node.js asynchronous protractor cucumberjs


【解决方案1】:
  [15:32:13] E/launcher - "process.on('uncaughtException'" error, see launcher
  [15:32:13] E/launcher - Process exited with error code 199

上述错误可能是由于各种原因引起的,主要与 Promise 相关。但它应该抛出正确的信息。 https://github.com/angular/protractor/issues/3384 这里已经提供了一个解决方法来捕获确切的错误消息。

您可以更改上述论坛中提到的protractor 依赖项中的launcher.ts 文件以捕获错误以调试您的问题。

我建议你在protractor-cucumber 中编写步骤定义时使用return 你的promise 而不是callbacks,这样cucumber 就会知道何时完成它的异步操作。

【讨论】:

【解决方案2】:

试试下面的代码,看看是否有帮助。

browser.get(url);
browser.waitForAngular();
then try to call your function.

【讨论】:

    【解决方案3】:

    使用 protractor.ExpectedConditions 检查成功登录后将显示的页面上任何元素的可见性。编写如下所示的自定义方法。

    如果元素显示,则使用 browser.get() 导航其他页面;

    Code Snippet
    
     EC = protractor.ExpectedConditions;
     //targetElement=element(locator);
     this.isElementVisible = function (targetElement, timeOut) {
       'use strict';
       timeOut = timeOut !== undefined ? timeOut : 8000;
       browser.wait(EC.visibilityOf(targetElement), 
          timeOut).thenCatch(function()   
           {
            assert.fail(' element is not visible');
          });
     };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      相关资源
      最近更新 更多