我试图找出如何使这个基本测试通过一致。
describe('home page', function () {
beforeEach(function () {
browser.driver.get('https://localhost:0000/xxxx/');
});
it('should have a title', function () {
var userName = browser.driver.findElement(by.id('userid_inputtext')).sendKeys('userNameXX');
var passWord = browser.driver.findElement(By.id("password_inputtext")).sendKeys("passWordXX");
var login = browser.driver.findElement(By.id('sign_in_button'));
login.click();
browser.driver.getCurrentUrl();
browser.driver.getTitle().then(function (title) {
expect(title).toEqual('Webpage Title');
});
});
});
登录页面不是Angular,但登录后会加载Angular应用程序。现在我的测试通过了一些时间。问题是,有时它会获取登录页面的标题,有时它会获取主页的标题(我希望它在登录后始终如一地测试主页的标题)。
我已经玩过使用承诺和浏览器。等一下但是没有真正把它钉死。任何建议都会很棒!
答案 0 :(得分:2)
我能想到的一些事情 - 量角器API中的大多数方法都是异步的并且返回promise。
在browser.getCurrentUrl
后的登录页面中,您的主页需要一些时间才能加载,因此请遵循 - browser.getTitle
&首先调用browser.getCurrentUrl
。如你所指出,这种情况不一致。
此外,您应该将变量分配给元素定位器,然后对它们执行操作!您应该使用页面对象来存储定位器。请参阅Official Protractor Style Guide
browser.wait
也会返回您必须解决的承诺。
要解决此问题,您应该以正确的方式使用describe('home page', function () {
beforeEach(function () {
browser.driver.get('https://localhost:0000/xxxx/');
});
it('should have a title', function () {
var userName = browser.driver.findElement(by.id('userid_inputtext'));
userName.clear();
userName.sendKeys('userNameXX');
var passWord = browser.driver.findElement(By.id("password_inputtext"));
passWord.clear();
passWord.sendKeys("passWordXX");
var login = browser.driver.findElement(By.id('sign_in_button'));
browser.driver.wait(login.click(),5000,'homePage should be loaded within 5 secs'); // would throw an error if the page takes more than 5 secs to load
// you could also use `browser.driver.sleep(500)` but not advisable as sleeps slow the tests down!
browser.driver.getCurrentUrl().then(function (url) {
expect(url).toEqual('homePage url');
});
browser.driver.getTitle().then(function (title) {
expect(title).toEqual('Webpage Title');
});
});
});
:
browser.ignoreSynchronization
此外,由于您的登录页面是非角度的,您可以以正确的方式编写测试,即使用describe('home page', function () {
beforeEach(function () {
browser.get('https://localhost:0000/xxxx/');
});
it('should have a title', function () {
browser.ignoreSynchronization = true; // set it to true for non-angular pages(loginPage)
var userName = element(by.id('userid_inputtext'));
userName.clear();
userName.sendKeys('userNameXX');
var passWord = element(By.id("password_inputtext"));
passWord.clear();
passWord.sendKeys("passWordXX");
var login = element(By.id('sign_in_button'));
browser.wait(login.click(),5000,'homePage should be loaded within 5 secs');
browser.ignoreSynchronization = false; // set it to false for angular pages(homePage)
browser.getCurrentUrl().then(function (url) {
expect(url).toEqual('homePage url');
});
browser.getTitle().then(function (title) {
expect(title).toEqual('Webpage Title');
});
});
});
并以更干净的方式使用量角器api方法。
browser.driver
请注意,无需访问kendo.parseDate(date,"yyyy-MM-ddTHH:mm:ss.fffZ")
对象,您可以直接使用量角器的方法!