2009-06-16 27 views
6

Selenium có một số hỗ trợ tốt đẹp cho việc tìm kiếm các yếu tố trong một trang qua xpathSử dụng waitForCondition selen với một xpath

selenium.isElementPresent("//textarea")

và trong các trang ajax bạn có thể sử dụng waitForCondition đợi trên một trang cho đến khi một cái gì đó xuất hiện

selenium.waitForCondition("some_javascript_boolean_test_as_a_string", "5000")

Khó khăn của tôi là, dường như tôi không thể vào vị trí để sử dụng hỗ trợ xpath cho thử nghiệm boolean. document.getElementById dường như hoạt động tốt, nhưng selenium.isElementPresent thì không.

Có cách nào dễ dàng truy cập vào phần tử xpath của selen tìm kiếm các khả năng từ bên trong tham số đầu tiên của waitForCondition không?

+0

Làm thế nào bạn có đang chạy kịch bản này? Bạn đang làm điều này từ IDE Selenium, hoặc xuất khẩu nó sang ngôn ngữ khác (C#, Java, v.v.) – Josh

+0

Từ Java - Tôi đã giả định rằng nó không quan trọng vì tất cả đều xuống cùng một JavaScript –

Trả lời

3

Nếu bạn muốn chọn một phần tử bằng cách id, điều đơn giản nhất là sử dụng Selenese thẳng:

isElementPresent("textarea") 

Nếu bạn nhấn mạnh vào việc sử dụng xpath bạn có thể phải sử dụng

isElementPresent("//*[@id='textarea']") 

hoặc

isElementPresent("//id('textarea')") 

(Chức năng id có thể không tương thích với trình duyệt chéo)

Nếu điều này không giúp tài liệu html của bạn cũng có thể có vấn đề về cấu trúc đang gây ra điều này xảy ra. Chạy trình xác thực html như html validator để kiểm tra các vấn đề lồng nhau và tương tự trên trang của bạn.

+0

dù sao để chờ văn bản bên trong một phần tử với điều đó? – gcb

5

Bạn có thể làm một cái gì đó như thế này:

selenium.waitForCondition(
    "var x = selenium.browserbot.findElementOrNull('elementIdOrXPathExpression');" 
    + "x != null && x.style.display == 'none';", "5000"); 

Các waitForCondition chỉ đánh giá kết quả biểu hiện js cuối cùng như một boolean, do đó cho phép bạn viết bài kiểm tra phức tạp (như trình bày ở đây). Ví dụ, chúng tôi cũng đang sử dụng kỹ thuật này để kiểm tra xem jQuery AJAX đã thực hiện xong chưa.

Hạn chế duy nhất là bạn hiện cũng đang dựa vào trình duyệt và API lõi cấp thấp hơn.

8

Một cách đơn giản hơn để làm điều đó là:

selenium.waitForCondition("selenium.isElementPresent(\"xpath=//*[@id='element_id_here']/ul\");", time_out_here); 
Các vấn đề liên quan