2010-10-15 136 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();