2013-08-23 64 views
16

我想要使用量角器得到選擇元素的選項值。但是,我無法找到選項元素。如何獲得選擇元素的選項值

HTML

<select ng-options="opions.c as options.n for option in options" ng-model="model"> 
    <option value="0">Option 1</option> 
    <option value="1">Option 2</option> 
</select> 

規格文件

describe('testing select option', function() { 
    it('', function() { 
     ptor = protractor.getInstance(); 

     //This will not get the option required 
     ptor.findElement(protractor.By.binding('model')); 
    }); 
}); 

我似乎無法找到一種方法來獲取期權價值,因爲我還沒有找到,我可以使用的功能那不會給出和例外或錯誤信息。

有誰知道如何解決這個問題?

+0

在這個線程中沒有人回答op提出的問題 - 甚至在他們的答案中都沒有op! *所有*答案downvoted。 – 7stud

+0

@ 7stud如果你看他自己發佈的答案,你會知道他想知道的與他發佈的問題實際上是不同的。他詢問如何從下拉菜單中獲取選定的值,而他的答案實際上是如何通過單擊從下拉菜單中選擇其中一個選項。他不知道他想要什麼。 – zsong

+0

我想說我不知道​​我想要的是什麼都沒有幫助。如果您無法爲此主題提供任何形式的建設性答案,請不要回答或發表評論。這並不能幫助社區批評它的成員。我沒有在答案中說明選擇選項的值,但代碼顯示了預期的內容。 –

回答

4

好的,我現在已經能夠弄清楚如何用量角器抓住選項元素。

下面的示例代碼顯示瞭如何完成此操作。

ptor.findElement(protractor.By.css('select option:nth-child(value of the option you require IE: the number)')).click(); 
33

我有一些問題得到下拉列表運作良好,並已花了一些時間工作今天它(因此我在這裏分享它,以防其他人發現它是有用的)。

在較早版本的量角器中,有一個by.selectedOption,它有效地做了與by.select相同的事情,但只返回選定的項目。因此,要獲得高於所選選項的文本,你可以有:

expect(element(by.selectedOption('model')).getText()).toEqual('Option 1'); 

我寫了一篇博客文章,如果你想了解更多的細節,也講述了一個輔助函數用於選擇下拉菜單中的選項:http://technpol.wordpress.com/2013/12/01/protractor-and-dropdowns-validation/

最近量角器版本已刪除此功能,以替代它:

expect(element(by.id('my_id')).element(by.css('option:checked')).getText(); 

哪個更靈活,因爲它可以應用於任何拾得,而selectedOption只能用模型查找工作。

+0

感謝您與我們分享您的研究資訊! – Voles

+0

但是,您如何獲得「價值」屬性的價值?我嘗試getCssValue('價值'),但這並不適合我。 – Machtyn

+0

謝謝。對我來說,讓人大開眼界的是'選項:checked'選擇器。我之前曾嘗試使用'option:selected'選項無效,即使它在我的Chrome控制檯中返回了適當的元素。 –

0

嘗試使用XPath:

ptor.findElement(protractor.By.xpath('//select/option[1]'));

您可以使用相同的技術來選擇由值的選項:

protractor.By.xpath('//select/option[text()="Option 2"]'));

我需要設立形式做到這一點其中輸入基於選定的下拉菜單可見,例如:

makeFord = protractor.By.xpath('//select[@id="make"]/option[text()="Ford"]')); 
modelMustang = protractor.By.xpath('//select[@id="model"]/option[text()="Mustang"]')); 
makeFord.click(); 
modelMustang.click(); 
+3

使用xpath的問題是路徑可能會隨着開發的進行而改變,這會使得測試變得脆弱並且容易失敗。使用CSS也可以產生相同的影響。只要前端團隊明白,由於某些前端開發人員不喜歡id標籤或PaulL下面的建議,因此使用id標籤是最好的解決方案。 –

0

這裏是你如何能得到選項中的選項的值:

HTML

<select ng-options="opions.c as options.n for option in options" ng-model="model"> 
    <option value="Africa">Option 1</option> 
    <option value="Switzerland">Option 2</option> 
</select> 

的.spec文件

describe("Country <select>", function() { 

    it("should have 'Africa' as the value of the first option", function() { 

    browser.get('index.html'); 

    let all_options = element.all(
     by.options("opions.c as options.n for option in options") //use whatever string is assigned to the ng-options attribute in the html 
    ); 

    let first_option = all_options.get(0); //or all_options.first() 
    let second_option = all_options.get(1); //or all_options.last() 

    expect(
     first_option.getAttribute('value') 
    ).toEqual("Africa");       

    }); 

}); 

要獲得的價值選擇的選項(可通過調用點擊用量角器編程選擇一個選項的()在一個選項上):

expect(
     element( 
     by.model('model') //'model' is the string assigned to the select's ng-model attribute         
    ).element(     
      by.css('option:checked') 
     ).getAttribute('value') 
    ).toEqual('Swizerland');