2013-08-23 4 views
16

Tôi đang cố gắng lấy giá trị tùy chọn của phần tử chọn bằng Thước đo góc. Tuy nhiên, tôi không thể tìm thấy phần tử tùy chọn.Cách lấy giá trị tùy chọn của phần tử chọn

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> 

Spec-file

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

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

tôi dường như không thể tìm thấy một cách để lấy các giá trị tùy chọn như tôi đã không tìm thấy một chức năng mà tôi có thể sử dụng không cung cấp và ngoại lệ hoặc thông báo lỗi.

Có ai biết cách giải quyết vấn đề này không?

+0

Không ai trong chủ đề này trả lời câu hỏi được đặt ra bởi op - thậm chí không phải câu trả lời trong câu trả lời của họ! * Tất cả * câu trả lời đều được giảm giá. – 7stud

+0

@ 7stud Nếu bạn nhìn vào câu trả lời được đăng bởi chính mình, bạn sẽ biết những gì anh ta muốn biết là thực sự khác với câu hỏi mà anh ta đã đăng. Anh ấy hỏi về cách lấy giá trị đã chọn từ menu thả xuống trong khi câu trả lời của anh ấy thực sự là cách chọn một trong các tùy chọn từ trình đơn thả xuống bằng cách nhấp vào nó. Anh ta không biết gì về điều anh ta muốn. – zsong

+0

Tôi nghĩ rằng tôi không biết mình muốn gì không hữu ích chút nào. Nếu bạn không thể cung cấp bất kỳ loại câu trả lời mang tính xây dựng nào cho chủ đề này thì vui lòng không trả lời hoặc bình luận. Điều này không giúp cộng đồng chỉ phê bình các thành viên của nó. Tôi không thể nêu giá trị tùy chọn lựa chọn trong câu trả lời, tuy nhiên mã cho thấy những gì đã được dự định. –

Trả lời

4

ok lần nữa tôi đã có thể tìm ra cách lấy phần tử tùy chọn bằng thước đo góc.

mã ví dụ bên dưới cho thấy cách thực hiện việc này.

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

Tôi đã có một số vấn đề nhận được Dropdowns làm việc tốt, và đã dành một số thời gian làm việc ngày nay nó ra (và do đó tôi chia sẻ nó ở đây trong trường hợp ai đó tìm thấy nó hữu ích).

Trên các phiên bản cũ hơn của Thước đo có một by.selectedOption, có hiệu quả tương tự như by.select, nhưng chỉ trả lại mục đã chọn. Vì vậy, để có được nội dung của phương án chọn ở trên, bạn có thể có:

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

tôi đã viết một bài đăng blog nếu bạn muốn biết thêm chi tiết, nó cũng bao gồm một chức năng helper để lựa chọn các tùy chọn trong menu thả xuống: http://technpol.wordpress.com/2013/12/01/protractor-and-dropdowns-validation/

các phiên bản gần đây của thước đo góc đã gỡ bỏ chức năng này, thay thế nó bằng:

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

đó là linh hoạt hơn, vì nó có thể được áp dụng cho bất kỳ Finders, trong khi selectedOption chỉ làm việc với một công cụ tìm mô hình.

+0

cảm ơn bạn đã chia sẻ thông tin nghiên cứu của mình với chúng tôi! – Voles

+0

Nhưng làm cách nào để bạn nhận được giá trị của thuộc tính 'giá trị'? Tôi đã thử getCssValue ('value') nhưng điều đó không hiệu quả đối với tôi. – Machtyn

+0

Cảm ơn. Thứ mở mắt cho tôi là bộ chọn 'option: checked'. Trước đây tôi đã thử 'tùy chọn: đã chọn' để không có kết quả, mặc dù nó đã trả lại các phần tử thích hợp trong bảng điều khiển Chrome của tôi. –

0

Hãy thử sử dụng xPath:

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

Bạn có thể sử dụng kỹ thuật tương tự để chọn một tùy chọn theo giá trị:

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

Tôi đã cần thiết để thực hiện điều này cho việc thiết lập các hình thức nơi đầu vào hiển thị dựa trên danh sách thả xuống đã chọn, ví dụ:

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

vấn đề với việc sử dụng xpath là các đường dẫn có thể thay đổi theo tiến độ phát triển, điều này làm cho các thử nghiệm dễ vỡ và dễ bị thất bại. sử dụng css cũng có thể có ảnh hưởng tương tự. Sử dụng thẻ id là giải pháp tốt nhất miễn là nhóm giao diện người dùng hiểu rằng những thay đổi này không bắt buộc vì một số nhà phát triển giao diện người dùng không thích thẻ id hoặc như PaulL đề xuất bên dưới. –

-1

Để liệt kê các thẻ tùy chọn, bạn có thể thử sử dụng phương thức .all và trước tiên bạn nên truy cập nó theo cha mẹ.

element(by.model('model')).all(by.tagName('option')).then(function(arr) { 
     expect(arr.length).toEqual(2); 
}); 

Có một cái nhìn tại các tài liệu tham khảo API cho cảm hứng

http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.all

Edit: cũng làm theo hướng dẫn phong cách mà không khuyến khích sử dụng XPath http://www.protractortest.org/#/style-guide

0

Đây là cách bạn có thể nhận được giá trị của một tùy chọn trong một lựa chọn:

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 tập tin

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");       

    }); 

}); 

Để có được giá trị của một chọn tùy chọn (có thể là một lựa chọn lập trình được lựa chọn với thước đo bằng cách gọi nhấp chuột() trên một tùy chọn):

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