2012-04-19 80 views
3

我正在嘗試爲我的網站進行測試。在某些用戶表單上遇到麻煩。訣竅是,表單中文本字段的數量取決於用戶選項(禁用的代碼存在於代碼中,但具有樣式< displayed: none;> tag),所以我試圖找到比定位每個元素更靈活的方法元素一個接一個,用try/except塊填充表單。需要可見元素的xpath定位器

我使用XPath定位

text_fields = driver.find_elements_by_xpath("//div[@class='form-line']/div[@class='form-inputs']/input[@type='text' and not(ancestor::div[@style='display: none;'])]")

麻煩的是,螢火蟲只查找需要的元素,但是當我使用它在我的硒腳本,打印的text_fields名單給我的所有元素,即使沒有< displayed: none;>標籤

如何獲取僅可見元素?

PS對不起,我的英文不好^ _^

+0

def make_an_order(driver): text_fields = driver.find_elements_by_xpath(「// div [@ class ='form-line']/div [@ class ='form-inputs']/input [@ type ='text 「) 用於text_fields字段: 嘗試: field.clear() 除外: 通 實測值的溶液中。但問題仍然很有趣 – 2012-04-19 11:15:25

+0

注入jQuery並使用[':visible'](http://api.jquery.com/visible-selector/)選擇器替代? – Alp 2012-04-19 11:23:09

回答

4

您可以通過常規方式獲取所有表單元素,然後遍歷列表並刪除那些在is_displayed()上不返回true的元素。

+0

謝謝,您的方法工作得很好! – 2012-07-07 08:01:37

1

嘗試方法:

text_fields = driver.find_elements_by_xpath(
    "//div[@class='form-line']/div[@class='form-inputs']/input[@type='text' and 
    not(ancestor::div[contains(@style, 'display: none;')])]") 

最重要的部分是:

div[contains(@style, 'display: none;')] 

注意,如果樣式包含字符串display:none;display:none,選擇器將不匹配。

+0

我忘了提,但我首先嚐試了_contains()_方法。同樣的故事 – 2012-04-19 11:14:34

+0

請發佈您的HTML – Alp 2012-04-19 11:24:06

0

我使用以下,它工作得很好。

self.assertTrue(driver.find_element_by_xpath("//div[@id='game_icons']/div/div[2]/div/a/img")) 

這是用於Selenium和Python的。