2015-12-18 65 views
4

在以前的問題,我已經看到了一個很好的方式,以等待URL改變是使用:Protractor-通用等待URL改變

browser.wait(function() { 
    return browser.getCurrentUrl().then(function(url) { 
     return /myURL/.test(url); 
    }); 
}, 10000, "url has not changed");` 

但我想有一個方法,我可以將myURL作爲變量傳遞(以防我需要將其用於其他站點)並且不起作用。

我在我的頁面對象文件嘗試這樣的:

this.waitUrl = function(myUrl) { 
    browser.wait(function(myUrl) { 
     return browser.getCurrentUrl().then(function(url, myUrl) { 
      return myUrl.test(url); 
     }); 
    }, 10000, "url has not changed"); 
}; 

任何想法,如果這甚至有可能,以及如何如果這樣做呢?

回答

7

更新(七月2016):Protractor 4.0.0你可以用urlIsurlContains解決它內置的預期條件。


原來的答覆:

不通過myUrlthen函數內部,它可以從頁面對象功能範圍:

browser.wait(function() { 
    return browser.getCurrentUrl().then(function(url) { 
     return myUrl.test(url); 
    }); 
}, 10000, "url has not changed"); 

我雖然將其定義爲預期的條件

function waitUrl (myUrl) { 
    return function() { 
     return browser.getCurrentUrl().then(function(url) { 
      return myUrl.test(url); 
     }); 
    } 
} 

這樣你就可以使用這種方式:通過5.3.0

browser.wait(waitUrl(/my\.url/), 5000); 
+0

嗨,謝謝你的回覆。 都嘗試並得到這個: '消息: 類型錯誤:myUrl.test不是一個函數 堆棧跟蹤: 類型錯誤:myUrl.test不是一個函數 at' –

+0

@JamesBe啊,肯定的是,你正在使用正則表達式匹配,所以你的url傳遞到預期的條件必須是一個正則表達式。更新了答案。 – alecxe

+0

@JamesBe你也可以傳遞一個字符串,並通過'new Regexp(myUrl)'創建一個正則表達式對象。 – alecxe

0

對於那些想要一個例如的量角器4.0.0您可以使用「ExpectedConditions」像這樣...

var expectedCondition = protractor.ExpectedConditions; 
// Waits for the URL to contain 'login page'. 
browser.wait(expectedCondition.urlContains('app/pages/login'), 5000); 

如果您想通過e2e測試進行驗證。

it('should go to login page', function() { 
    loginPage.login(); 
    const EC = protractor.ExpectedConditions; 

    browser.wait(EC.urlContains('app/pages/login'), 5000).then(function(result) { 
     expect(result).toEqual(true); 
    }); 

});