Javascript 点击谷歌ChromeDriver上使用量角器选择的选项;
我试着点击选择,然后点击保存按钮。 我可以在浏览器上看到它确实可以工作,但是当点击save按钮时,google chrome不明白,说我没有点击那个必填字段。如何修复Javascript 点击谷歌ChromeDriver上使用量角器选择的选项;,javascript,selenium,protractor,Javascript,Selenium,Protractor,我试着点击选择,然后点击保存按钮。 我可以在浏览器上看到它确实可以工作,但是当点击save按钮时,google chrome不明白,说我没有点击那个必填字段。如何修复 <select class="form-control ng-pristine ng-invalid ng-touched" id="ano-norma" required=""> <option disabled="" selected= "" value= "undefined" > Selecione
<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>
及
我正在使用google chrome作为浏览器。
谷歌浏览器似乎不明白这个下拉列表已经被选中了
“Campo obrigatório”表示“必填字段”您的代码是错误的,不是元素()。全部()。单击()。应该是这样的:
element(by.id('ano-norma')).element(by.cssContainingText('option', '2017')).click();
或
你有时间问题。
当您使用then()
时,它会打开一个新的异步任务,并允许Proactor并行地继续执行then()
之后的下一行。因此,当您打开下拉列表时,您基本上同时单击Save按钮。如果“保存”按钮处于非活动状态,则在下拉选择之前,一切看起来都正常,只是没有保存任何内容
解决方案1(推荐):调用then()
-部分中的save按钮
-函数
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:使用回调让量角器知道何时继续(未测试此量角器,因此它可能无法按我在此处编写的方式工作)
如果其中一个解决方案对您有效,请告诉我。即使是一个下拉列表,我也使用了click()和sendkeys(),其效果非常好
element(by.id('ano-norma')).click().then( () => {
element(by.id('ano-norma')).sendKeys('2015');
});
browser.actions() 在另一个it函数中,使用
元素(by.id('save')。单击()代码>请共享控制台错误您可以共享保存按钮的html代码吗?控制台没有错误。浏览器工作正常。我可以看到下拉菜单正确地切换了valor。但在“保存”单击时,它不起作用。如果我执行手动测试,它的工作正常。从您对上述答案的评论中,下拉菜单选择正确的选项,但您在单击“保存”按钮时遇到问题。因此,您的问题与“谷歌浏览器”或“不理解量角器选择的选项”无关。我猜当选择它的选项时,下拉列表会绑定一些事件,当您手动执行时,这些事件会触发成功,但是自动化脚本无法触发它们,即使您看到选项确实发生了更改。我想你需要调查一下对期权变化感兴趣的事件(绑定到下拉列表)。嗨,我也试过了,但没有成功。因此,我首先单击元素,然后使用sendKey写入值,我不知道为什么,这是工作。在选择下拉菜单后,是否正在进行加载操作,因此您的页面尚未准备好处理保存操作?还要注意,您的测试用例可能会在then()
-部分完成之前完成。我将编辑我的答案,为您提供一个稍微调整过的尝试方法。@paulotarcio我用一个更好、完整的示例扩展了我的解决方案1。
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();
});
});
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();
};
element(by.id('ano-norma')).click().then( () => {
element(by.id('ano-norma')).sendKeys('2015');
});