小编典典

我该如何等待状况?

angularjs

我是量角器的新手,我正在尝试实施e2e测试。我不知道这是否是正确的方法,但是…我要测试的页面不是基于完整角度的页面,所以…我遇到了一些麻烦。

在我的第一个规范中,我有:

describe('should open contact page', function() {
var ptor = protractor.getInstance();

beforeEach(function(){

   var Login = require('./util/Login');
   new Login(ptor);
});

我已经创建了这个Login类,但是登录后我想打开联系页面,但是量角器会在页面完全加载之前立即尝试查找元素。

我尝试使用:

browser.driver.wait(function() {

    expect(browser.findElement(by.xpath("//a[@href='#/contacts']")).isDisplayed());
    ptor.findElement(by.xpath("//a[@href='#/contacts']")).click();

});

但这是行不通的……它总是在页面加载之前尝试查找元素。我也尝试过这个:

browser.driver.wait(function() {
    expect(ptor.isElementPresent(by.xpath("//a[@href='#/contacts']")));          
    ptor.findElement(by.xpath("//a[@href='#/contacts']")).click();
});

我可以使用来做到这一点,browser.sleep();但我认为这不是一个好选择。任何想法?在我的登录课程中,我有:

ptor.ignoreSynchronization = true;

@href='#/contacts在量角器尝试单击它之前,我如何等待它?


阅读 212

收藏
2020-07-04

共1个答案

小编典典

我在使用量角器时遇到了最长的相同问题。在我的e2e测试中,我从一个非角度应用开始,然后进入一个有角度的部分,然后又回到一个非角度的部分。使事情变得棘手。关键是要了解承诺及其工作方式。以下是在有效的e2e测试中我的真实世界代码的一些示例。希望这可以为您提供有关如何构建测试的想法。可能是该代码中的一些不好的做法,请随时对此进行改进,但是我知道它可以工作,也许不是最好的方法。

为了达到角度我使用

var ptor;
var events = require('events');
var eventEmitter = new events.EventEmitter();
var secondClick = require('./second-click');

beforeEach(function () {
    browser.driver.get('http://localhost:8080/');
},10000);

it("should start the test", function () {
    describe("starting", function () {
        it("should find the  link and start the test", function(){
            var elementToFind = by.linkText('Start'); //what element we are looking for
            browser.driver.isElementPresent(elementToFind).then(function(isPresent){
                expect(isPresent).toBe(true); //the test, kind of redundant but it helps pass or fail
                browser.driver.findElement(elementToFind).then(function(start){
                    start.click().then(function(){ //once we've found the element and its on the page click it!! :) 
                        ptor = protractor.getInstance(); //pass down protractor and the events to other files so we can emit events
                        secondClick(eventEmitter, ptor); //this is your callback to keep going on to other actions or test in another file
                    });
                });
            });
        });
    });
},60000);

在角度时,此代码有效

 describe("type in a message ", function(){
        it("should find and type in a random message", function(){
            var elementToFind = by.css('form textarea.limited');
            browser.driver.isElementPresent(elementToFind).then(function(isPresent){
                element(elementToFind).sendKeys(randomSentence).then(function(){
                    console.log("typed in random message");
                    continueOn();
                });
            });
        });
    },15000);

退出角度后

browser.driver.wait(function(){
   console.log("polling for a firstName to appear");
   return    browser.driver.isElementPresent(by.name('firstName')).then(function(el){
         return el === true;
       });
     }).
   then(function(){
       somefunctionToExecute()
    });

希望能提供一些指导并帮助您!

2020-07-04