我正在使用protractor.js。使用我能够登录我的应用程序。但是在立即登录后,会弹出一个,我需要从中选择一个下拉值。但是使用protractor.js我无法做到这一点。代码如下所述。
describe('angularjs homepage todo list', function() {
it('should add a todo', function() {
browser.ignoreSynchronization = true;
browser.get('https://sample.com');
//browser.waitForAngular();
//browser.sleep(10000);
browser.pause();
element(by.id('userId')).sendKeys('johny.selvaraj@test.com');
browser.manage().timeouts().pageLoadTimeout(5000);
element(by.id('password')).sendKeys('*********');
browser.manage().timeouts().pageLoadTimeout(5000);
**element(by.className('id-login-button wk-button-primary wk-button-full')).click();**
//browser.manage().timeouts().pageLoadTimeout(5000);
//browser.ignoreSynchronization = false;
browser.sleep(20000);
browser.switchTo().defaultContent();
browser.wait( done => {
return element(by.model('productSelectionCtrl.selectedProduct')).isPresent();
})
.then(()=>{
element(by.model('productSelectionCtrl.selectedProduct')).click();
element(by.cssContainingText('option', 'Master Suite')).click();
browser.sleep(20000);
done;
});
});
});
我的代码正在工作,直到变为粗体的行。之后,我点击了弹出窗口的类名,需要从下拉列表中选择一个值为“Master suite”的值,其中包含ng-model(productSelectionCtrl.selectedProduct)。但这还没有完成。能帮帮我吧。
我甚至尝试使用(browser.ignoreSynchronization = false;)因为我的主页是有角度的页面,但结果是徒劳的。请帮我从下拉列表中选择一个值。也许问题是等待或超时。我在控制台中得到的错误如下所述。
Failures:
1) angularjs homepage todo list should add a todo
Message:
Error: Timeout - Async callback was not invoked within timeout specified by
jasmine.DEFAULT_TIMEOUT_INTERVAL.
Stack:
Error: Timeout - Async callback was not invoked within timeout specified by
jasmine.DEFAULT_TIMEOUT_INTERVAL.
at tryOnTimeout (timers.js:232:11)
at Timer.listOnTimeout (timers.js:202:5)
1 spec, 1 failure
Finished in 36.928 seconds
[18:20:14] I/launcher - 0 instance(s) of WebDriver still running
[18:20:14] I/launcher - chrome #01 failed 1 test(s)
[18:20:14] I/launcher - overall: 1 failed spec(s)
[18:20:14] E/launcher - Process exited with error code 1
答案 0 :(得分:1)
by.className
需要单个班级名称。如果要使用多个类,请使用 CSS选择器定位器:
$('.id-login-button.wk-button-primary.wk-button-full').click();
请注意,如果您使用ESLint
和eslint-plugin-protractor
插件(绝对无耻的自我推销),您可能会更早地发现此错误 - 存在相关的no-compound-classes
规则
作为旁注,请尽量避免使用browser.sleep()
,而是使用browser.wait()
和一组内置Expected Conditions。