2011-08-03 35 views
14

Chúng tôi đang sử dụng selenium WebDriver và JBehave để chạy các bài kiểm tra "tích hợp" trên ứng dụng web của chúng tôi. Tôi có một phương thức sẽ nhập một giá trị vào đầu vào biểu mẫu.Selenium WebDriver để chọn mục hộp kết hợp?

@When("I enter $elementId value $value") 
public void enterElementText(final String elementId, final String value) { 
    final WebElement webElement = webdriver.findElement(By.id(elementId)); 
    webElement.clear(); 
    webElement.sendKeys(value); 
} 

Nhưng khi tôi cố gắng sử dụng này để chọn một mục trong danh sách thả xuống nó (gì ngạc nhiên) thất bại

java.lang.UnsupportedOperationException: Bạn chỉ có thể thiết lập giá trị của các yếu tố là các yếu tố đầu vào

Làm cách nào để chọn giá trị trong kết hợp?

+0

thể trùng lặp của [Webdriver + HtmlUnitDriver + Java + Thả xuống] (http://stackoverflow.com/ question/5805585/webdriver-htmlunitdriver-java-drop-down) –

Trả lời

17

Đây là cách để làm điều đó:

@When("I select $elementId value $value") 
public void selectComboValue(final String elementId, final String value) { 
    final Select selectBox = new Select(web.findElement(By.id(elementId))); 
    selectBox.selectByValue(value); 
} 
2

Mô hình Selen là bạn phải mô phỏng những gì người dùng sẽ làm trong cuộc sống thực. Vì vậy, đó sẽ là một nhấp chuột hoặc một phím để điều hướng.

Actions builder = new Actions(driver); 
Action action = builder.click(driver.findElement(By.id(elementId))).build(); 
action.perform(); 

Miễn là bạn có bộ chọn làm việc để nạp vào findElement, bạn sẽ không gặp vấn đề gì với nó. Tôi đã tìm thấy bộ chọn CSS để đặt cược tốt hơn cho những thứ liên quan đến nhiều yếu tố. Bạn có một trang mẫu?

+0

Không hiệu quả đối với tôi, tôi không thể tìm thấy lớp Hành động. BTW sử dụng selenium 2.x. Nhưng hãy xem câu hỏi SO khác mà tôi đã đánh dấu là trùng lặp. –

+0

Tải xuống phiên bản mới nhất. Tôi nghĩ rằng nó được sử dụng để được gọi là ActionBuilder hoặc một cái gì đó –

7

Gói hỗ trợ trong Selenium chứa tất cả các bạn cần:

using OpenQA.Selenium.Support.UI; 

SelectElement select = new SelectElement(driver.findElement(By.id(elementId))); 
select.SelectByText("Option3"); 
select.Submit(); 

Bạn có thể nhập nó thông qua NuGet như là một gói riêng biệt: http://nuget.org/packages/Selenium.Support

4

Bằng cách sử dụng loại combobox ext jsAhead để làm cho các giá trị hiển thị trong giao diện người dùng.

var theCombo = new Ext.form.ComboBox({ 
... 
id: combo_id, 
typeAhead: true, 
... 
}); 

driver.findElement(By.id("combo_id-inputEl")).clear(); 
driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need"); 
driver.findElement(By.id("combo_id-inputEl")).sendKeys(Keys.ARROW_DOWN); 
driver.findElement(By.id("combo_id-inputEl")).sendKeys(Keys.ENTER); 

Nếu rằng công việc doesn't này cũng rất đáng để thử

driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need"); 
driver.findElement(By.className("x-boundlist-item")).click(); 
+0

Cũng hoạt động trong Java: cho một số 'WebElement templateInput', bạn có thể làm' templateInput.sendKeys (STANDARD_TEXT + Keys.ARROW_DOWN + Keys.ENTER); ' – barclay

Các vấn đề liên quan