2010-10-15 157 views
3

我有一個網站與形式的元素:獲取文本從所有元素硒與模式匹配

<td id="subject_23432423">content I want to read</td> 

如何使用Selenium RC(與Python綁定專)來讀取這些內容元素?我已經完成了所有的命令,雖然有很多選項可以查找單個元素,但沒有一個命令似乎處理多個匹配的列表。例如,我可以找到使用特定元素的內容:

content = sel.get_text("td[@id='subject_23432423']") 

但這種假設我已經知道的ID,這是我做的,不是因爲它是動態生成的。

回答

3

對於Selenium 1 API來說這是不可能的,但是如果subject_總是出現在生成的ID中,您可以調用一個將使用XPath定位元素的JavaScript //td[contains(@id, "subject_")]。我不確定Selenium browserbot是否爲IE提供XPath支持,因此您可能僅限於具有本機支持的瀏覽器。在Firefox這將是:

var tds = document.evaluate("//td[contains(@id, \"subject_\")]", document, null, 
     XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
for (var i = 0; i < tds.snapshotLength; i++) { 
    var td = tds.snapshotItem(i); 
    // get text using td.textContent and add it to array or whatever... 
    // and return it 
} 

return ... 

您需要聲明該腳本代碼中的字符串,並通過selenium.getEval

如果你能切換到 Selenium 2 (WebDriver)執行

但是,您可以使用其API。您將需要使用findElementsBy傳遞的XPath //td[contains(@id, "subject_")],然後通過匹配的返回數組進行迭代,並得到每個元素

+0

謝謝。我發現的另一個解決方案是,我最終將通過sel.get_eval(「this.browserbot.getCurrentWindow()。document.getElementById('parentElementId')。innerHTML」)檢索父容器的HTML。從那裏我只用Python運行我的正則表達式。 – Cerin 2010-10-15 21:43:49

5

我會做的是以下技術

count = sel.get_xpath_count("xpath=//td[starts-with(@id,'subject_')]") 
someArray = [] 
for i in count: 
    someArray[i] = sel.get_text("xpath=//td[starts-with(@id,'subject_')][" + i + "]") 

或一個文本使用BeautifulSouplxml

html = sel.get_html_source() 
from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
#use beautifulsoup to do what you want 
1

它一定要在硒是可能的,因爲這種類型的東西更effiecent方式測試計劃(使用硒和工作正常HTMLUnit作爲後端)。在這種情況下,簡單的TestPlan腳本可能如下所示。

for %Element% in (response //td[starts-with(@id,'subject_')]) 
    Notice %Element% 
end 

當寫入通知時,將自動調用字符串的轉換,但要存儲在數組中則同樣簡單。

0

在硒2

我們可以檢查

列表受試者= driver.findElements(By.xpath( 「// TD [含有(@id, 'subject_')]」)) INT大小= subjects.size();