分度器は初めてです。 Angularページを扱うとき、私はこれを持っていると思いますが、Angular以外のページについては理解できません。何か助けていただければ幸いです。
describe('Search', function() {
it('should click Search button and wait for results', function() {
browser.driver.findElement(by.id('search')).click();
});
});
これを理解しました。クリックメソッドの後に、以下のコードを追加しただけです。
describe('Search', function() {
it('should click Search button and wait for results', function() {
browser.driver.findElement(by.id('search')).click();
dvr.wait(function() {
return dvr.isElementPresent(by.xpath(
'/html/body/div/div[4]/div/div[2]/div/div/div/span'));
}, 20000);
});
});
分度器で角度のないページをテストすることは、物事を待つことに関して難しい場合があります。
分度器を 最新 (現在は1.5.0)にアップグレードし、 カスタム関数waitReady() を使用して、準備ができている要素にbrowser.wait
を使用し、テストを書き直すことをお勧めします。以下のように。必要に応じて、すべてを1つの仕様内に収めることができます。
// TODO: use page objects
var searchBtnElm = $('#search'); // use element(by.id('search')) if you prefer
it('waits for the elements present and visible (non-angular)', function() {
expect(searchBtnElm.waitReady()).toBeTruthy();
});
it('should click Search button', function() {
searchBtnElm.click();
});
it('wait for more results', function() {
// keep using waitReady() before interacting with the elements
// and before performing expectations on them
});
waitReady
ここ の理由の詳細。
注:角度のないページをテストするには、同期を無視するように設定することを忘れないでください。
browser.ignoreSynchronization = true;
角度のないページのbrowser.get
の前に設定できます。
過去に高い暗黙の待機を設定することを提案しました。
browser.manage().timeouts().implicitlyWait(5000);
そのhackにより、waitReady
を回避し、標準を使い続けることができます
expect(searchBtnElm.isPresent()).toBeTruthy();
ただし、要素[〜#〜] not [〜#〜]が存在するかどうかをテストする場合、つまり、その場合、ベーンで5秒(5000ms)待機します。するとき
expect(someNonExistingElm.isPresent()).toBeFalsy();
もう1つの優れたアプローチは、browser.wait内で「ExpectedConditions」を使用することです-次のようなものです。
var EC = protractor.ExpectedConditions;
var search = element(by.id('search'))
browser.wait(EC.visibilityOf(search), 2000).then(function(){
search.click()
})
詳細については、こちらをご覧ください: https://angular.github.io/protractor/#/api?view=ExpectedConditions
分度器では、ページに2つのタイプの用語があります。 isPresent
要素がページに存在するかどうかを尋ねます。 isDisplayed
は、要素が表示されているかどうかを尋ねます。ページが読み込まれるのを待っている場合は、isDisplayed
を待つ必要がありますが、ページが存在しない場合はエラーになるため、最初にisPresent
を待ちます。関数を使用して要素を待機します。
function waitForElement(el, waitTimeoutMilliseconds){
return browser.wait(function() { return el.isPresent(); }, waitTimeoutMilliseconds)
.then(function(){
return browser.wait(function() { return el.isDisplayed(); }, waitTimeoutMilliseconds);
});
}
次に、テストでその関数を呼び出すだけです。
describe('Search', function() {
it('should click Search button and wait for results', function() {
var el = element(by.id('search'));
waitForElement(el, 5000);
el.click();
});
});