2009-06-16 74 views
6

硒對通過的XPath找到頁面中的元素一些不錯的支持使用硒的waitForCondition使用XPath

selenium.isElementPresent("//textarea")

和AJAX頁面,您可以使用waitForCondition等待頁面,直到事情出現

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

我的困難是,我似乎無法進入使用xpath支持布爾測試的位置。 document.getElementById似乎工作正常,但selenium.isElementPresent不。

是否有任何簡單的方法從waitForCondition的第一個參數中訪問selenium的xpath元素查找功能?

+0

你是如何運行此腳本?您是從Selenium IDE執行此操作,還是將它導出爲其他語言(C#,Java等)。 – Josh 2009-06-16 03:13:13

+0

來自Java - 我假設它並不重要,因爲它都歸結爲相同的JavaScript – 2009-06-16 04:07:52

回答

3

如果你想選擇由ID的元素,最簡單的就是用直Selenese的:

isElementPresent("textarea") 

如果你堅持使用XPath您可能需要使用

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

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

(id功能可能不是跨瀏覽器兼容)

如果這不能幫助您的html文檔也可能導致這種情況發生的結構性問題。運行一個HTML驗證程序,如html validator以檢查網頁上的嵌套問題和類似問題。

5

你可以做這樣的事情:

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

的waitForCondition只是計算上次JS表達式的結果布爾值,從而使您可以編寫複雜的測試(如下圖所示)。例如,我們也使用這種技術來測試jQuery AJAX是否已經完成執行。

唯一的缺點是您現在還依賴於browserbot和較低級別的核心js API。

8

一個更簡單的方法來做到這一點是:

selenium.waitForCondition("selenium.isElementPresent(\"xpath=//*[@id='element_id_here']/ul\");", time_out_here);