browser.get在使用Protractor

时间:2016-07-19 10:44:10

标签: angularjs node.js asynchronous protractor cucumberjs

我使用Protractor with 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');
  });

非常感谢任何建议的工作。

3 个答案:

答案 0 :(得分:2)

  [15:32:13] E/launcher - "process.on('uncaughtException'" error, see launcher
  [15:32:13] E/launcher - Process exited with error code 199

上述错误可能是由于与承诺有关的各种原因造成的。但它应该抛出正确的信息。这里提供了一个解决方法https://github.com/angular/protractor/issues/3384以捕获确切的错误消息。

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

return中编写步骤定义时,我会建议您callbacks承诺而不是protractor-cucumber,这样黄瓜就会知道何时完成异步操作。

答案 1 :(得分:0)

尝试以下代码。检查是否有帮助。

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

答案 2 :(得分:0)

使用 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');
      });
 };