点击Google ChromeDriver上使用量角器选择的选项;

时间:2017-10-18 17:55:11

标签: javascript selenium protractor

我试图单击选择选项,然后单击按钮保存。 我可以在浏览器上看到它确实有效,但是当点击按钮保存时,谷歌浏览器不理解并说我没有点击该必填字段。怎么解决?

<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();
});

我使用谷歌浏览器作为浏览器。

谷歌浏览器似乎不明白已经选择了下拉列表。

enter image description here

“Campodarrigatório”的意思是“必填字段”

3 个答案:

答案 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();