2011-10-20 30 views
6

Tôi đang tìm cách triển khai thực hiện việc này. Điều tốt nhất tôi đã đi lên với là:Trình điều khiển Web Selenium 2.0: triển khai isTextPresent

public boolean isTextPresent(String string) { 

     for (WebElement e : drv.findElements(By.cssSelector("*"))) { 

      if (e.isDisplayed() && e.getText().contains(string)) { 
       return true; 
      } 

     } 
     return false; 
    } 
+1

Bạn không thể cụ thể hơn khi tìm kiếm các văn bản không? Điều này sẽ chậm vì bạn có khả năng đi bộ toàn bộ DOM. IE sẽ là tồi tệ nhất. Sẽ tốt hơn nếu bạn ít nhất có thể thu hẹp tìm kiếm xuống một số ... – Mikezx6r

+1

Đương nhiên bạn đã đúng. Tôi đang chạy ở đó bằng cách sử dụng Jenkins, vì vậy thời gian thực sự là ít hơn của một vấn đề. –

Trả lời

5

Một cách nhanh hơn để làm điều đó sẽ là một cái gì đó như thế này:

public boolean isTextPresent(string str) 
{ 
    IWebElement bodyElement = driver.FindElement(By.TagName("body")); 
    return bodyElement.Text.contains(str); 
} 

Đó là trong C# nhưng đó là khái niệm tương tự. Lấy văn bản của thẻ body sẽ tự động trả về văn bản của tất cả các phần tử lồng nhau. Điều duy nhất tôi không chắc chắn về là nếu các yếu tố ẩn được bao gồm hay không.

+0

Có vẻ tốt. Điều này sẽ nắm bắt văn bản vô hình quá? Ví dụ. JavaScript? –

+0

Không, điều này sẽ trả về văn bản hiển thị trên màn hình, tức là văn bản bên trong của các phần tử. Ví dụ:

Văn bản này

. – prestomanifesto

+0

Tuyệt vời - cảm ơn! –

0

Các mã sau sử dụng Java trong WebDriver nên hoạt động tốt như isTextPresent:

assertTrue(driver.getPageSource().contains("Welcome Ripon")); 
assertTrue(driver.findElement(By.id("widget_205_after_login")).getText().matches("^[\\s\\S]*Welcome ripon[\\s\\S]*$")); 
Các vấn đề liên quan