使用动态ID定位元素

时间:2015-07-22 13:30:44

标签: java selenium xpath selenium-webdriver salesforce

如果页面中有一个元素如下(有多个选择元素)

<select size="1" name="j_id0:j_id2:j_id37:j_id38:0:j_id41">
<select size="1" name="j_id0:j_id2:j_id37:j_id38:1:j_id41">

唯一的标识符是它的名称,但名称会动态更改,如何在不引用名称的情况下在selenium(java)中找到它?

我目前正在使用xpath,如下所示

/html/body/div/div[2]/table/tbody/tr/td[2]/form/div[3]/div/div/div/div[2]/div[1]/span[3]/select

问题是如果页面上的任何内容发生变化,这个xpath将会中断。

是否有更好的替代方法不容易被打破?

3 个答案:

答案 0 :(得分:0)

您已正确注意到所提供的XPath非常脆弱。查看页面的完整HTML,或者至少是select元素的前后元素也是有用的。根据我们现在的情况,您可以依赖name属性的一部分:

//select[contains(@name, "j_id")]

答案 1 :(得分:0)

我认为您网站上的所有ID都不是动态的。

因此,有一种更清晰的方式来编写定位器。

提供更多的html结构,我可以为您提供更多详细信息。

答案 2 :(得分:0)

试试..这些选择标签必须有一些标签相关联。使用以下兄弟和祖先xpath轴来相对于标签定位元素。

http://www.w3schools.com/xpath/xpath_axes.asp