2012-06-07 35 views
8

Có cách nào trong phiên bản mới nhất của Selenium DotNet Webdriver (2.22.0) để kiểm tra xem một phần tử có hiển thị trước khi nhấp/tương tác với nó không?Selenium C# Webdriver Cách phát hiện xem phần tử có hiển thị hay không

Cách duy nhất tôi tìm thấy là cố gắng xử lý ngoại lệ ElementNotVisible xảy ra khi bạn cố gắng gửi khóa hoặc nhấp vào nó. Thật không may điều này chỉ xảy ra sau khi một nỗ lực để tương tác với các yếu tố đã được thực hiện. Tôi đang sử dụng hàm đệ quy để tìm các phần tử với một giá trị nhất định và một số thành phần này chỉ hiển thị trong một số trường hợp nhất định (nhưng html của chúng vẫn còn ở đó cho dù chúng có thể tìm thấy gì).

Đó là sự hiểu biết của tôi rằng lớp RenderedWebElement không được chấp nhận cũng như các biến thể khác. Vì vậy, không đúc cho điều đó.

Cảm ơn.

+0

Nên có một WebElement.isDisplayed() để kiểm tra xem phần tử là có thể nhìn thấy –

+0

Thật không may bắt ngoại lệ là con đường để đi. Được hiển thị và được kích hoạt không phải lúc nào cũng hiển thị phần tử có thể hành động, có nghĩa là mục đó có thể vừa được hiển thị vừa được kích hoạt nhưng vẫn không thể nhấp được. Điều này xảy ra khi phần tử nằm ngoài khung nhìn (trong một số trình duyệt), và những gì bạn cần làm là di chuyển đến phần tử để nó trở nên hiển thị. – ljgww

Trả lời

18

Đối với Java có được isDisplayed() trên RemoteWebElement - cũng là isEnabled()

Trong C#, có một Displayed & thuộc tính Enabled.

Cả hai phải đúng cho một phần tử nằm trên trang và hiển thị với người dùng.

Trong trường hợp "html vẫn không có vấn đề gì, vì vậy chúng có thể được tìm thấy", chỉ cần chọn BOTH isDisplayed (Java)/Displayed (C#) AND isEnabled (Java)/Enabled (C#).

Ví dụ, trong C#:

public void Test() 
{ 
    IWebDriver driver = new FirefoxDriver(); 
    IWebElement element = null; 
    if (TryFindElement(By.CssSelector("div.logintextbox"), out element) 
    { 
     bool visible = IsElementVisible(element); 
     if (visible) 
     { 
      // do something 
     } 
    } 
} 

public bool TryFindElement(By by, out IWebElement element) 
{ 
    try 
    { 
     element = driver.FindElement(by); 
    } 
    catch (NoSuchElementException ex) 
    { 
     return false; 
    } 
    return true; 
} 

public bool IsElementVisible(IWebElement element) 
{ 
    return element.Displayed && element.Enabled; 
} 
+0

Cảm ơn sự giúp đỡ! – user1442482