我的网站包含以下格式的元素:
<td id="subject_23432423">content I want to read</td>
如何使用Selenium RC(特别是Python绑定)来读取所有这些元素的内容?我已经完成了所有命令,虽然有很多选项可以找到单个元素,但是没有一个命令可以处理多个匹配的列表。例如,我可以使用以下命令查找特定元素的内容:
content = sel.get_text("td[@id='subject_23432423']")
但这假设我已经知道了id,我没有,因为它是动态生成的。
答案 0 :(得分: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 + "]")
或以更有效的方式使用BeautifulSoup或lxml
html = sel.get_html_source()
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
#use beautifulsoup to do what you want
答案 1 :(得分:3)
使用Selenium 1 API是不可能的,但如果//td[contains(@id, "subject_")]
始终存在于生成的ID中,则可以调用使用XPath subject_
定位元素的JavaScript。我不确定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_")]
,然后遍历返回的匹配数组并获取每个元素的文本
答案 2 :(得分:1)
在Selenium中肯定是可能的,因为这种类型的东西在TestPlan中运行良好(它使用Selenium和HTMLUnit作为后端)。在这种情况下,简单的TestPlan脚本可能如下所示。
for %Element% in (response //td[starts-with(@id,'subject_')])
Notice %Element%
end
在编写通知时会自动调用到字符串的转换,但要存储在数组中就很容易。
答案 3 :(得分:0)
在Selenium 2中
我们可以检查
列出subject = driver.findElements(By.xpath(&#34; // td [contains(@id,&#39; subject _&#39;)]&#34;)) int size = subjects.size();