我一直在玩量角器和承諾,我對我得到的不同結果感到困惑。我有三個測試基本上加載www.angularjs.org並等待「主頁」鏈接。量角器:使用承諾
describe('Sample tests', function() {
it("test1", function(){
browser.get("angularjs.org");
browser.wait(protractor.ExpectedConditions.visibilityOf(element(by.linkText('Home'))))
.then(function() {
console.log("element visible");
})
})
it("test2", function() {
browser.get("angularjs.org");
fn1().then(function(){
return browser.wait(protractor.ExpectedConditions.visibilityOf(element(by.linkText('Home'))))
.then(function() {
console.log("element visible");
})
});
function fn1() {
return new Promise(function (fulfill, reject){
fulfill();
});
}
})
it("test3", function() {
browser.get("angularjs.org");
fn1().then(function(){
browser.wait(protractor.ExpectedConditions.visibilityOf(element(by.linkText('Home'))))
.then(function() {
console.log("element visible");
}, function(err) {
console.log("error: " + err);
})
});
function fn1() {
return new Promise(function (fulfill, reject){
browser.manage().addCookie("abc", "123")
.then(function() {
console.log("set cookie");
fulfill();
}, function(err){
console.log("error in fn1: " + err);
})
});
}
})
})
TEST1通行證和輸出element visible
。
test2的失敗例外Error while waiting for Protractor to sync with the page: "[ng:test] http://errors.angularjs.org/1.5.8/ng/test"
或Error: Error while waiting for Protractor to sync with the page: "window.angular is undefined.
TEST3不打印element visible
,並間歇輸出error: WebDriverError: no such session (Driver info: chromedriver=2.22.397929 (fb72fb249a903a0b1041ea71eb4c8b3fa0d9be5a),platform=Mac OS X 10.10.5 x86_64)
有趣的是,如果我移動browser.get("angularjs.org");
到beforeEach
塊,TEST2不會拋出錯誤並輸出element visible
,而test1和test3的行爲相同,無論browser.get("angularjs.org");
的位置如何。
所以我的問題是
- 爲什麼把
browser.get("angularjs.org");
在beforeEach
塊使test2的工作,爲什麼不的browser.get("angularjs.org");
位置影響TEST1和TEST3? - 爲什麼不測試3輸出
element visible
?
UPDATE 我固定由
- 返回從FN1
- 的瀏覽器的承諾在
fn1().then(...)
- 返回瀏覽器的承諾TEST3鏈的附加
then
子句來結束(fn1().then().then()
),並稱爲done()
。
it("test3", function(done) {
browser.get('https://www.angularjs.org')
fn1()
.then(function(){
return browser.wait(protractor.ExpectedConditions.visibilityOf(element(by.linkText('Home'))))
.then(function() {
console.log("element visible");
}, function(err) {
console.log("error: " + err);
})
})
.then(function(){
done();
});
function fn1() {
return new Promise(function (fulfill, reject){
return browser.manage().addCookie("abc", "123")
.then(function() {
console.log("set cookie");
fulfill();
}, function(err){
console.log("error in fn1: " + err);
})
});
}
})
「// do stuff」究竟是什麼? – Bergi
您是否嘗試在您的承諾中添加'.catch()'處理程序? – Bergi
@Bergi我編輯了這個問題,並將錯誤處理添加到test3,它現在輸出'WebDriverError:no such session'。刪除了/ /做東西,因爲它只是一個評論。 – mws