2011-11-18 31 views
54

Tôi đang sử dụng Selenium trong Java để kiểm tra việc kiểm tra hộp kiểm trong ứng dụng web. Đây là mã:Thuộc tính hộp kiểm Selenium "checked"

private boolean isChecked; 
private WebElement e; 

Tôi tuyên bố e và gán nó vào khu vực có hộp kiểm.

isChecked = e.findElement(By.tagName("input")).getAttribute("checked").equals("true"); 

là gì kỳ lạ là getAttribute("checked") lợi nhuận null và do đó một NullPointerException

Trong HTML cho hộp kiểm, không có checked thuộc tính hiển thị. Tuy nhiên, không phải là trường hợp tất cả các phần tử input có mã số checked = "true" để mã này có hoạt động không?

Trả lời

91

Nếu bạn đang sử dụng Trình quản lý web thì mục bạn đang tìm kiếm sẽ được chọn.

Thông thường, lần hiển thị trong hộp kiểm không thực sự áp dụng thuộc tính được chọn trừ khi được chỉ định.

Vì vậy, những gì bạn sẽ tìm kiếm trong Selenium Webdriver là này

isChecked = e.findElement(By.tagName("input")).Selected; 

Vì không có lựa chọn trong WebDriver Java API, các mã trên nên thực hiện như sau:

isChecked = e.findElement(By.tagName("input")).isSelected(); 
+0

Terrific! Tôi không thể tin rằng tôi không thấy phương thức 'isSelected()' trong API. Tôi đã cố gắng viết phương pháp riêng của mình cho nó khi nó đã tồn tại. Cảm ơn bạn. – jamesfzhang

0

Cơ chế của khung selen:

Đây selen thực hiện yêu cầu đến máy chủ của mình và lấy subelement đầu tiên với tagname đầu vào

WebElement e = e.findElement(By.tagName("input")); 

hơn bạn cố gắng để nhận được thuộc tính trên yếu tố đó

object attribute = e.getAttribute("checked") 

Vì vậy, hãy sử dụng

findElement(By.attribute("checked") 

hoặc sử dụng

findElement(By.xpath("\\input[@checked='true']") 

T.B. Tôi không quen thuộc với java tương đương với selenium api vì vậy một số phương pháp có thể được đặt tên hơi khác nhau.

+0

Điều này thực sự không giải quyết được vấn đề. Tôi đang cố gắng để xác định nếu một hộp kiểm được chọn, do đó boolean 'isSelected'. Tôi không cố gắng tìm một hộp kiểm được chọn. Dù sao tôi sẽ chỉ sử dụng một cách giải quyết bằng cách xung quanh 'isSelected' với một' try' và 'catch' trên một' NullPointerException' – jamesfzhang

6
if(checkBox.getAttribute("checked") != null) // if Checked 
    checkBox.click();       //to Uncheck it 

Bạn cũng có thể thêm tuyên bố and để chắc chắn nếu được chọn là đúng sự thật.

4

tôi sẽ làm điều đó với cssSelector:

// for all checked checkboxes 
driver.findElements(By.cssSelector("input:checked[type='checkbox']")); 
// for all notchecked checkboxes 
driver.findElements(By.cssSelector("input:not(:checked)[type='checkbox']")); 

Có lẽ đó cũng giúp ;-)

+0

Điều này không trả lời được câu hỏi. Nó không phải là câu hỏi làm thế nào để tìm kiếm một hộp kiểm tra. Câu hỏi đặt ra là nếu bất kỳ hộp kiểm nào được kiểm tra hay không. – Elmue

10
if (!driver.findElement(By.id("idOfTheElement")).isSelected()) 
{ 
    driver.findElement(By.id("idOfTheElement")).click(); 
} 
1

Đối với sự kiện này, nơi có nhiều hộp kiểm mà từ đó bạn muốn chọn/bỏ chọn chỉ một vài công việc sau đây với Trình điều khiển Chrome (bằng cách nào đó không thành công cho Trình điều khiển IE):

LƯU Ý: Các hộp kiểm của tôi không có ID liên kết với chúng, đây là cách tốt nhất để nhận dạng chúng một theo tài liệu.Lưu ý các dấu hiệu ! ở đầu của tuyên bố.

if(!driver.findElement(By.xpath("//input[@type='checkbox' and @name='<name>']")).isSelected()) 
{ 
    driver.findElement(By.xpath("//input[@type='checkbox' and @name= '<name>']")).click(); 
} 
0
  1. Khai báo biến.
  2. Lưu trữ thuộc tính đã chọn cho nút radio.
  3. Có điều kiện if.

Cho phép giả định

private string isChecked; 
private webElement e; 
isChecked =e.findElement(By.tagName("input")).getAttribute("checked"); 
if(isChecked=="true") 
{ 

} 
else 
{ 

} 

Hope câu trả lời này sẽ giúp đỡ cho bạn. Hãy cho tôi biết, nếu có bất kỳ làm rõ trong trình điều khiển web CSharp Selenium.

0
public boolean getcheckboxvalue(String element) 
    { 
     WebElement webElement=driver.findElement(By.xpath(element)); 
     return webElement.isSelected(); 
    } 
+1

Bạn nên sử dụng phương thức 'isSelected()'. Tuy nhiên, mã của bạn không trả lời trực tiếp câu hỏi. Nó sẽ là tốt nếu bạn thay đổi nó để phù hợp với mã trong bài đầu hoặc giải thích (bằng tiếng Anh) những gì thay đổi bạn đề nghị. –

+0

phần tử là xpath mà bạn sẽ gửi khi gọi hàm. giá trị trả lại sẽ là trạng thái của hộp kiểm. –

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