私が考えることができるいくつかの事柄 - 分度器APIのメソッドのほとんどは非同期であり、約束を返します。ログインページで
あなたlogin.click()
一度、あなたのホームページがロードに時間がかかり、そのためのような、次の非同期メソッド - browser.getCurrentUrl
& browser.getTitle
が最初に呼ばれています。あなたが指摘しているように、これは一貫して起こりません。
また、変数を要素ロケータに割り当ててから、それらにアクションを実行する必要があります。あなたはロケータを格納するためにページオブジェクトを使うべきです。 Official Protractor Style Guide
browser.getCurrentUrl
もまた解決しなければならない約束を返します。
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
を使用することです正しい方法でテストを書いて、使用できます:あなたは正しい方法でbrowser.wait
を使用する必要があり、この問題を解決するために
分度器のapiメソッドをよりクリーンな方法で実行します。
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');
});
});
});
お知らせbrowser.driver
オブジェクトにアクセスする必要がない、あなたは直接分度器のメソッドを使用することができます!
'.click()'メソッドは有効ではありませんか? –
それはその中に 'login.click()'の下にコードを置くと、まだログインページのタイトルをつかんでいます。 –