2017-10-18 109 views
-1

我试图点击一个选择的选项,然后点击按钮保存。 我可以在浏览器中看到它确实有效,但是当点击按钮保存时,谷歌浏览器不理解,并说我没有点击那个必填字段。怎么修?在Google ChromeDriver上点击选择使用量角器;

<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

“坎普obrigatório” 的意思是 “必填字段”

+0

你在哪里点击保存代码? –

+0

在另一个函数中使用'element(by.id('save'))。click();' – paulotarcio

+0

请分享控制台错误 –

回答

0

即使是下拉菜单,我仍然使用click()和sendkeys()及其作品。

element(by.id('ano-norma')).click().then(() => { 
       element(by.id('ano-norma')).sendKeys('2015'); 
       }); 

browser.actions()。sendKeys(protractor.Key.ENTER).perform();

0

你的代码是错误的,而不是元素()。所有()。点击()。它应该是这样的:

element(by.id('ano-norma')).element(by.cssContainingText('option', '2017')).click(); 

element(by.cssContainingText('#ano-norma > option', '2017')).click(); 
+0

我也试过了,但没有奏效。 – paulotarcio

+0

从您对上述答案的评论中,下拉列表选择正确的选项,但是当您单击保存按钮时遇到问题。因此,您的问题与'google chrome'或'不了解量角器选定的选项'无关。我猜这个下拉菜单在选择它的选项时会绑定一些事件,这些事件可能会在您手动执行时触发成功,但即使您看到选项确实已更改,自动化脚本仍未能触发它们。我认为你需要研究这个事件(绑定到下拉列表)选项变化的利息。 – yong

0

你有一个时机的问题。 当您使用then()时,它会打开一个新的异步任务,并允许并行区域继续then()之后的下一行。因此,当您打开下拉菜单时,您几乎在同一时间点击Save-Button。如果您的保存按钮处于非活动状态,则在下拉选择之前,所有内容看起来都像是起作用,只是没有保存。

解决方案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:使用回调,让量角器知道,当继续(没有测试这一项,所以它可能无法工作,我在这里写的方式)

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

让我知道,如果解决方案之一为你工作。

+0

嗨,我也试过,但没有工作。因此,我首先点击元素,然后使用sendKey写入值,我不知道为什么,它的工作原理 – paulotarcio

+0

您选择下拉菜单后是否正在执行加载操作,因此您的页面尚未准备好处理保存操作呢?另外请注意,你的测试用例可以在'then()'-part完成之前完成。 我会编辑我的答案,给你稍微调整的方法来尝试。 –

+0

@paulotarcio我用一个更好,完整的例子扩展了我的解决方案1。 –