我在端到端测试,第一次运行。我试图消化别人的量角器测试。问题:有很多 browser.driver.sleep
的,这似乎是脆弱的。目标:不使用 browser.driver.sleep
问:什么是 browser.driver.sleep
更好的方法?类似的承诺或某事我不知道笑那么脆弱?
VAR配置=要求('../../ protractor.conf.js')配置。描述(本网页身体测试,函数(){browser.driver.get(config.homepageUrl);它(应该打开找到一家诊所页面功能(){ //页面加载::要修复这种随机等待时间 browser.driver.sleep(2000); browser.ignoreSynchronization = TRUE; VAR字符串='诊所'; VAR主要='.search大型文本'; VAR链接=元素(by.cssContainingText(字符串)子菜单里一个。'); link.click()。然后(函数(){ //页面重载::要修复这种随机等待时间 browser.driver.sleep(3000); VAR标题=元素(by.cssContainingText(主,字符串)); 期待(title.getText())TOBE(字符串)。 });});});
解决方案
由于有一个 ignoreSynchronization
开启,您不能使用 waitForAngular()
,这将是在角度现场测试的情况下的溶液中。
有一个更好的解决方案在这里将设置的页面加载超时的:
browser.manage()超时()pageLoadTimeout(10000)。 //10秒
另见明确的等待和超时这些相关的主题:
Use量角器在非AngularJS页测试登录(狮子座的答案是非常详细) Protractor:如何等待页面完成点击一个按钮后? 超时My first run at E2E tests. I'm trying to digest someone else's protractor tests.
Problem: There are a lot of browser.driver.sleep
and this seems fragile.
Goal: not to use browser.driver.sleep
Question: What is a better approach to browser.driver.sleep
? Something less fragile like a promise or something I dont know about lol?
var config = require('../../protractor.conf.js').config;
describe('this Homepage Body Tests', function(){
browser.driver.get(config.homepageUrl);
it("should open find a clinic page", function(){
// page loads :: want to fix this random wait interval
browser.driver.sleep(2000);
browser.ignoreSynchronization = true;
var string = 'clinic';
var main = '.search-large-text';
var link = element(by.cssContainingText('.submenu li a', string));
link.click().then(function() {
// page reloads :: want to fix this random wait interval
browser.driver.sleep(3000);
var title = element(by.cssContainingText(main, string));
expect(title.getText()).toBe(string);
});
});
});
解决方案
Since there is an ignoreSynchronization
turned on, you cannot use waitForAngular()
, which would be a solution in case of an angular-site testing.
A better solution here would be to set a page load timeout:
browser.manage().timeouts().pageLoadTimeout(10000); // 10 seconds
See also these relevant threads on explicit waits and timeouts:
Use protractor to test login on non-AngularJS page (Leo's answer is very detailed) Protractor: How to wait for page complete after click a button? Timeouts