我试图单击选择选项,然后单击按钮保存。 我可以在浏览器上看到它确实有效,但是当点击按钮保存时,谷歌浏览器不理解并说我没有点击该必填字段。怎么解决?
<select class="form-control ng-pristine ng-invalid ng-touched" id="ano-norma" required="">
<option disabled="" selected= "" value= "undefined" > Selecione um ano< /option>
<option value="2017" > 2017 < /option><option value="2016">2016</option >
<option value="2015" > 2015 < /option>
<option value="2014">2014</option >
<option value="2013" > 2013 < /option>
<option value="2012">2012</option >
<option value="2011" > 2011 < /option>
<option value="2010">2010</option >
<option value="2009" > 2009 < /option>
<option value="2008">2008</option >
</select>
我试过了:
element(by.id('ano-norma')).all(by.cssContainingText('option', '2017')).click();
和
element(by.id('ano-norma)).click().then( () => {
element(by.id('ano-norma)).all(by.tagName('option)).get(2).click();
});
我使用谷歌浏览器作为浏览器。
谷歌浏览器似乎不明白已经选择了下拉列表。
“Campodarrigatório”的意思是“必填字段”
答案 0 :(得分:0)
你的代码错了,而不是element()。all()。click()。它应该是这样的:
element(by.id('ano-norma')).element(by.cssContainingText('option', '2017')).click();
或
element(by.cssContainingText('#ano-norma > option', '2017')).click();
答案 1 :(得分:0)
你有时间问题。
当您使用then()
时,它会打开一个新的异步任务,让并行的protactor继续then()
之后的下一行。因此,当您打开下拉列表时,基本上几乎同时单击“保存”按钮。如果你的保存按钮处于非活动状态,那么在下拉选择之前,一切看起来都有效,只是没有保存。
解决方案1(推荐):在SaveButton
- 部分内调用then()
- 函数。
element(by.id('ano-norma')).click().then( () => {
element(by.id('ano-norma')).all(by.tagName('option')).get(2).click();
//call your saveButton-function here.
});
或者更好,在单独的测试用例中尝试:
it("should test select dropdown and save", function(done){
element(by.id('ano-norma')).click().then( () => {
element(by.id('ano-norma')).all(by.tagName('option')).get(2).click();
browser.waitForAngular(); //in case the dropdown-selection triggers processes
$(buttonElement).click();//call your saveButton-function here.
done();
});
});
解决方案2:使用回调让Protractor知道,何时继续(没有测试这个,所以它可能不像我在这里写的那样工作)
testCaseDropdownSelection = function(done) {
element(by.id('ano-norma')).click().then( () => {
element(by.id('ano-norma')).all(by.tagName('option')).get(2).click();
done();
});
};
testCaseClickSaveButton = function(){
$('saveButton').click();
};
如果其中一个解决方案适合您,请告诉我。
答案 2 :(得分:0)
即使是下拉列表,我也使用了click()和sendkeys(),它的工作非常完美。
element(by.id('ano-norma')).click().then( () => {
element(by.id('ano-norma')).sendKeys('2015');
});
。browser.actions()的SendKeys(protractor.Key.ENTER).perform();