2012-12-17 17 views
5

Xin chào Tôi cần kiểm tra trường thả xuống là có giá trị đã cho nhưng những giá trị này không được chọn sao cho nó không được hiển thị trong hộp thả xuống. Tôi đã theo dõi Xpath cho phần tửLựa chọn thay thế của selenium.isElementPresent trong Webdriver

//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not='] 

xác định yếu tố chính xác trong trình duyệt. Nhưng khi tôi đang sử dụng phương pháp trình quản trị web sau để xác minh nó

driver.findElement(By.xpath("//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']")).isDisplayed(); 

sai số trả về của nó vì nó không được hiển thị trong hộp.

Bạn có thể cho tôi biết cách thay thế này không.

Trả lời

8

Bạn muốn:

private boolean isElementPresent(WebDriver driver, By by){ 
    return driver.findElements(by).count != 0; 
} 

findElements() là tốt hơn cho điều này hơn findElement() bởi vì nó sẽ không chờ đợi nếu nguyên tố này là không có mặt. Nếu bạn đang chạy với chờ đợi ngầm ẩn, findElement() sẽ hết thời gian tìm kiếm phần tử (đó là ngoại lệ bạn đang bắt) và sẽ mất một lúc.

+0

Tại sao tỷ lệ kiểm tra trả về bằng 0 nếu bạn đang thử nghiệm nếu có một phần tử? –

+0

@MatthewLock DOH! Cảm ơn, so sánh đã được đảo ngược, hiện đã được sửa. –

4

Tôi phát hiện ra rằng WebDriver không có chức năng gọi là isElementPresent(). Đây là một trong những chức năng quan trọng được sử dụng trong Selenium-1.0. Để thực hiện điều này trong WebDriver bạn chỉ cần viết một phương pháp như đã đề cập dưới đây. Sau đó bạn có thể sử dụng chức năng này với bất kỳ loại By (By.id, BY.name vv)

private boolean isElementPresent(WebDriver driver, By by){ 
    try{ 
    driver.findElement(by); 
    return true; 
    }catch(NoSuchElementException e){ 
    return false; 
    } 
} 

Và đây là một ví dụ về cách bạn sẽ gọi hàm này

if (isElementPresent(by.id("btnSubmit")) { 
    // preform some actions 
} 

Các Hàm trên sẽ trả về true trong trường hợp phần tử được tìm thấy trên trang, nếu không nó sẽ trả về false.

+1

@ Chạy mã ở trên dễ đọc hơn và có thể sử dụng lại được. Chỉ đề xuất thêm là cải thiện mã bao gồm hết thời gian chờ. Vì thường là kiểm tra cho phần tử xuất hiện là một số khung thời gian. –

+0

-1 cho 'findElement()' -with-timeout thay vì 'findElements()' -with-count. –

0
internal static bool IsElementPresent(IWebDriver driver, By by, int timeoutSeconds=10) 
    { 

     for (int second = 0; second< timeoutSeconds ; second++) 
     { 
      try 
      { 
       driver.FindElement(by); 
      } 
      catch (NoSuchElementException e) 
      { 
       Thread.Sleep(1000); 
       continue; 
      } 

      return true; 
     } 

     return false; 

    } 
0

Sử dụng isDisplayed() cho việc xác minh liệu một yếu tố có sẵn trên trang.