我搜索了几个问题,但我没有弄清楚我的问题:
我想测试/验证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对象)。
感谢所有评论/帮助。
答案 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