获取文本从所有元素硒与模式匹配
我有一个网站与形式的元素:获取文本从所有元素硒与模式匹配
<td id="subject_23432423">content I want to read</td>
如何使用Selenium RC(与Python绑定专)来读取这些内容元素?我已经完成了所有的命令,虽然有很多选项可以查找单个元素,但没有一个命令似乎处理多个匹配的列表。例如,我可以找到使用特定元素的内容:
content = sel.get_text("td[@id='subject_23432423']")
但这种假设我已经知道的ID,这是我做的,不是因为它是动态生成的。
对于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_")]
,然后通过匹配的返回数组进行迭代,并得到每个元素
我会做的是以下技术
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 + "]")
或一个文本使用BeautifulSoup或lxml
html = sel.get_html_source()
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
#use beautifulsoup to do what you want
它一定要在硒是可能的,因为这种类型的东西更effiecent方式测试计划(使用硒和工作正常HTMLUnit作为后端)。在这种情况下,简单的TestPlan脚本可能如下所示。
for %Element% in (response //td[starts-with(@id,'subject_')])
Notice %Element%
end
当写入通知时,将自动调用字符串的转换,但要存储在数组中则同样简单。
在硒2
我们可以检查
列表受试者= driver.findElements(By.xpath( “// TD [含有(@id, 'subject_')]”)) INT大小= subjects.size();
谢谢。我发现的另一个解决方案是,我最终将通过sel.get_eval(“this.browserbot.getCurrentWindow()。document.getElementById('parentElementId')。innerHTML”)检索父容器的HTML。从那里我只用Python运行我的正则表达式。 – Cerin 2010-10-15 21:43:49