我是量角器的新手,我正在尝试实施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();但我认为这不是一个好选择。任何想法?在我的登录课程中,我有:
browser.sleep();
ptor.ignoreSynchronization = true;
@href='#/contacts在量角器尝试单击它之前,我如何等待它?
@href='#/contacts
我在使用量角器时遇到了最长的相同问题。在我的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() });
希望能提供一些指导并帮助您!