Javascript 量角器等待页面完全加载
在转到之后,我试图单击教程下的“0-引导”,但量角器没有等待页面完全加载,因此我得到一个错误 失败:无法读取未定义的属性“单击” 我尝试使用手动方式等待页面加载 browser.driver.sleep10000 但我还是犯了同样的错误 conf.jsJavascript 量角器等待页面完全加载,javascript,node.js,angular,jasmine,protractor,Javascript,Node.js,Angular,Jasmine,Protractor,在转到之后,我试图单击教程下的“0-引导”,但量角器没有等待页面完全加载,因此我得到一个错误 失败:无法读取未定义的属性“单击” 我尝试使用手动方式等待页面加载 browser.driver.sleep10000 但我还是犯了同样的错误 conf.js exports.config = { // seleniumAddress: 'http://localhost:4444/wd/hub', getPageTimeout : 12000000, capabilities: { 'brow
exports.config = {
// seleniumAddress: 'http://localhost:4444/wd/hub',
getPageTimeout : 12000000,
capabilities: {
'browserName': 'chrome'
},
specs: ['todo-spec.js'],
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 1440000,
}
};
todo-spec.js
describe('angularjs homepage', function () {
it('should greet the named user', function () {
var dropdown = element.all(by.css('.dropdown')).first(),
dropdownToggle = dropdown.element(by.css('.dropdown-toggle')),
dropdownMenu = dropdown.element(by.css('.dropdown-menu')),
menuItem = dropdownMenu.all(by.tagName('li')).first();
browser.get('http://www.angularjs.org');
dropdownToggle.click();
menuItem.click();
expect(browser.getCurrentUrl()).toEqual('https://docs.angularjs.org/tutorial');
//waiting 10 seconds for the page to fully load
browser.driver.sleep(10000);
browser.waitForAngular();
});
it('', async function () {
/* tried waiting for the element to be present
var EC = protractor.ExpectedConditions;
var e = element.all(by.css('.nav-index-listing'))[0];
browser.wait(EC.presenceOf(e), 10000);
Failed: Cannot read property 'isPresent' of undefined
*/
//clicking '0 - Bootstrapping' under Tutorial
element.all(by.css('.nav-index-listing'))[0].click();
expect(element(by.cssContainingText('.pln', 'npm install')).isEnabled()).toBe(true);
// Failed: Cannot read property 'click' of undefined
});
});
编辑
取代
element.all(by.css('.nav-index-listing'))[0].click();
expect(element(by.cssContainingText('.pln', 'npm install')).isEnabled()).toBe(true);
借
我犯了一个错误
失败:等待在5001ms后超时
如果我删除浏览器。请稍候,我将
预计将相等
首先,不需要browser.driver.sleep10000。对于页面加载,可以使用dragrator.ExpectedConditions。如果页面已经加载,它将减少不必要的等待10秒
其次,代码中有一个小错误,这是问题的根本原因
换行
element.all(by.css('.nav-index-listing'))[0].click();
对此
element.all(by.css('.nav-index-listing')).get(0).click();
更新:
element.allby.css“.nav index list”将只提供通过测试的li元素。但是单击它,将不会引导您进入所需页面。
将其更改为:
element.all(by.css('.nav-index-listing a')).get(0).click();
在这种情况下,[0]将不起作用,因为返回的值不是数组。它是ElementArrayFinder类型。所以,这就是为什么需要.get0
如果您在测试中也检查以下条件,会更好
browser.wait(EC.urlIs("https://docs.angularjs.org/tutorial/step_00"), 5000);
expect(browser.getCurrentUrl()).toEqual('https://docs.angularjs.org/tutorial/step_00');
这些条件检查您当前的URL是否正确https://docs.angularjs.org/tutorial/step_00 或者不是
首先,不需要browser.driver.sleep10000。对于页面加载,可以使用dragrator.ExpectedConditions。如果页面已经加载,它将减少不必要的等待10秒
其次,代码中有一个小错误,这是问题的根本原因
换行
element.all(by.css('.nav-index-listing'))[0].click();
对此
element.all(by.css('.nav-index-listing')).get(0).click();
更新:
element.allby.css“.nav index list”将只提供通过测试的li元素。但是单击它,将不会引导您进入所需页面。
将其更改为:
element.all(by.css('.nav-index-listing a')).get(0).click();
在这种情况下,[0]将不起作用,因为返回的值不是数组。它是ElementArrayFinder类型。所以,这就是为什么需要.get0
如果您在测试中也检查以下条件,会更好
browser.wait(EC.urlIs("https://docs.angularjs.org/tutorial/step_00"), 5000);
expect(browser.getCurrentUrl()).toEqual('https://docs.angularjs.org/tutorial/step_00');
这些条件检查您当前的URL是否正确https://docs.angularjs.org/tutorial/step_00 或者不是
尝试使用waitForAngualarEnabledtrue而不是expected wait,这会使量角器等待直到加载所有角度元素,并在测试的每一行中添加wait。
否决票
接受尝试使用waitForAngualarEnabledtrue而不是预期的等待,这会使量角器等待,直到加载所有角度元素,并在测试的每一行中添加等待。
否决票
接受哇,非常感谢。我将[0]改为.get0,它确实有效,即使没有等待之类的东西。但请您解释一下为什么它与.get0一起工作而不是与[0]一起工作,因为我认为.get0和[0]只是做同样事情的两种方法从数组中获取第一个元素。@KedelMihail我更新了解决方案,以回答您的问题。以及提供一些可能对您有所帮助的其他反馈。当我使用browser.waitEC.urlI时shttps://docs.angularjs.org/tutorial/step_00,5000 I get-失败:等待在之后超时1002ms@KedelMihail此错误适用于不同的语句。上面写着失败:等待在1002ms后超时。这意味着您的代码中还有一个browser.wait语句,您提到1000毫秒是超时,但失败了。哇,非常感谢。我将[0]改为.get0,它确实有效,即使没有等待之类的东西。但请您解释一下为什么它与.get0一起工作而不是与[0]一起工作,因为我认为.get0和[0]只是做同样事情的两种方法从数组中获取第一个元素。@KedelMihail我更新了解决方案,以回答您的问题。以及提供一些可能对您有所帮助的其他反馈。当我使用browser.waitEC.urlI时shttps://docs.angularjs.org/tutorial/step_00,5000 I get-失败:等待在之后超时1002ms@KedelMihail此错误适用于不同的语句。上面写着失败:等待在1002ms后超时。这意味着您的代码中还有1个browser.wait语句,其中您提到1000毫秒为超时,但失败了。请阅读解决方案,它提到使用元素.allby.css'.nav index listing a'.get0.click;而不是element.allby.css.nav index list.get0.click;。您还必须在选择器中提到a标记。问题解决了吗?如果是,那么请接受解决方案。请阅读解决方案,其中提到使用element.allby.css'.nav index listing a'.get0.click;而不是element.allby.css.nav index list.get0.click;。您还必须在选择器中提到a标记。问题解决了吗?如果是,请接受该解决方案。默认情况下,waitForAngularEnabled处于启用状态,并且每次执行webdrive操作(如getCurrentUrl或单击)时都会调用它:waitForAngularEnabled在默认情况下处于启用状态,并在每次调用时调用 执行webdrive操作,如getCurrentUrl或单击: