Selenium能否支持从动态生成的网页获取“XPath / Dom”和更多信息?

时间:2012-06-18 03:21:17

标签: dom xpath selenium

我搜索了几个问题,但我没有弄清楚我的问题:

我想测试/验证2个系统的配置页面。但我面临三个挑战:

1.两个系统的页面看起来完全相同,但实际上相同项目的dom / xPath信息(文本,下拉列表,单选按钮等)完全不同。例如,页面上2个系统的“设备名称”字段有2个不同的xPath,例如sys1的xPath是“// input / abc”,sys2的xPath是“// input / xyz”。

2.有时页面是动态生成的,因此一个系统中同一项目的dom / xPath在不同时间可能会有所不同。

3.基于1& 2,我很难写一个脚本在所有系统上运行(我们将来会有更多的系统)。我不想为不同的系统定义不同的xpath / dom数据库。

我的问题是:

1.Can selenium返回页面上有多少“文本字段”“下拉列表”“单选按钮”对象?

2.Selenium可以在Question1中返回每个对象的xPath / dom吗?

我希望selenium可以返回每个对象的所有对象和xPath / dom信息,这样我就可以进行映射并调用不同的系统(我可以通过比较“相同”的索引/位置来决定当前使用的xPath对象)。

感谢所有评论/帮助。

2 个答案:

答案 0 :(得分:0)

我不知道c#,但是对于Java,有一个driver.findElements(By.xpath / css(xpath / css value)))。这将返回页面中元素的数量。如果您必须找到的文本框可以使用

之类的内容
driver.findElements(By.xpath(//input[@type='textbox']).size();

这将返回页面中文本框的数量。

问题2 - 检查一下。在SO中提出了类似的问题。

How to calculate the XPath position of an element using Javascript?

答案 1 :(得分:0)

你可以使用Linq这样的东西。例如,获取所有输入元素可以通过以下方式完成:

IWebDriver driver = new FirefoxDriver();
var inputElements = driver.FindElements(By.TagName("input")); // get all input elements
inputElements.Count(); // get how many input elements there are

或:

IWebDriver driver = new FirefoxDriver();
var inputElements = driver.FindElements(By.XPath("//input")); // get all input elements
inputElements.Count(); // get how many input elements there are