2011-07-05 29 views
6

chúng tôi muốn chuyển các thử nghiệm của mình sang selenium 2 và tôi đã tìm thấy một vấn đề mà tôi không biết cách giải quyết."Không tìm thấy phần tử" ngoại lệ trong WebDriver đang chạy trên Internet Explorer bằng cách sử dụng Java

Tôi đang sử dụng các lệnh sau đây cho webdriver:

WebDriver driver = new InternetExplorerDriver(); 
driver.navigate().to("webapp"); 
Thread.sleep(3000); 
System.out.println(driver.getPageSource()); 
WebElement element = driver.findElement(By.id("someid")); 

Tại dòng cuối cùng ngoại lệ xảy ra và không có yếu tố được tìm thấy. Ví dụ tương tự hoạt động tốt trong firefox, nhưng chúng tôi cần nó để có nó trong IE. Tôi đã cố gắng để thêm nhiều giấc ngủ, nhưng nó không giúp đỡ. Phương thức getPageSource trả về html đúng.

Tôi cũng đã cố gắng lấy thẻ body, bằng lệnh sau, nhưng nó trả về giá trị rỗng.

List<WebElement> list = driver.findElements(By.tagName("body")); 

Ứng dụng web của chúng tôi được tạo bằng gwt.

Bạn có biết điều gì có thể khiến selen không thấy bất kỳ thành phần nào không?

Trả lời

0

có lẽ bạn có thể cố gắng thêm

driver.switchTo().window(driver.getWindowHandle()); 

trước khi tìm kiếm các yếu tố. Tôi đã có vấn đề này khi Webdriver di chuyển giữa các trang trên các máy chủ khác nhau (không phải với IE nhưng với Firefox).

+2

Unfortunatelly không hoạt động. –

1

Mã bạn đăng hoàn toàn không có sự cố.

Đảm bảo bạn sử dụng một số phiên bản Selenium mới hơn chứ không phải một số phiên bản alpha/beta cũ. Bạn sử dụng IE nào, nó có bất kỳ tiện ích đặc biệt nào không? Nó có hoạt động với một số trang web tối thiểu như thế này không?

<html> 
<input id='myId' /> 
</html> 

Bạn đã thử tìm kiếm một yếu tố khác chưa? Bằng một số kỹ thuật khác như bộ chọn xpath hoặc css? Vốn của bạn có hoàn toàn đúng không? Nếu bạn lưu html của trang và thử tải cục bộ bằng testcase đã nói, nó có hoạt động không? Bạn có thể cung cấp một trường hợp thử nghiệm tối thiểu? Là một giải pháp cuối cùng không-để-làm việc, bạn có thể thử để dự phòng để Selenium 1 cho hai dòng mã mà giúp đỡ chờ đợi trong một số trường hợp hiếm gặp:

Selenium sele = new WebDriverBackedSelenium(driver, "webapp"); 
sele.waitForPageToLoad("10000"); 
+0

tôi sẽ thêm để đảm bảo rằng một số phần tử có id = 'someid' tồn tại trong mã HTML được tạo – Zecas

1

Hãy thử sử dụng một thông minh chờ đợi như thế này trước khi thực hiện câu lệnh chuyển nhượng của bạn. Bạn chỉ cần chuyển đối tượng WebDriver hiện tại của bạn và một giá trị thời gian chờ.

new WebDriverWait(driver, timeOutInSeconds).until(new ExpectedCondition<Boolean>() { 
     @Override 
     public Boolean apply(final WebDriver theDriver) { 
      return Boolean.valueOf(theDriver.findElements(By.id(elementId)).size() > 0); 
     } 
    }); 
+0

Vấn đề của tôi với giải pháp này là phương thức findElements ném NullPointerException, không thực hiện bất kỳ vấn đề nào để khắc phục sự cố. – NestorDRod

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