Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 点击谷歌ChromeDriver上使用量角器选择的选项;_Javascript_Selenium_Protractor - Fatal编程技术网

Javascript 点击谷歌ChromeDriver上使用量角器选择的选项;

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

我试着点击选择,然后点击保存按钮。 我可以在浏览器上看到它确实可以工作,但是当点击save按钮时,google chrome不明白,说我没有点击那个必填字段。如何修复

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