2017-10-18 107 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。 –