如何将xpath匹配每次页面加载时都会更改的id元素?

时间:2019-07-12 05:58:18

标签: selenium xpath selenium-ide

每次加载网页时,我都有这两个xpath不同。

xpath由Selenium-IDE记录,并且在id字符串中始终包含mainForm_view,并且此前后的文本始终会更改。

xpath=//input[@id='abc_hyd_wuu2_8333nd_mainForm_view_jjd_uueue2_jjd_11_jkdhd']
xpath=//div[@id='abc_hyd_wuu2_8333nd_mainForm_view_kcjjcs_sjsjs_jjdj_994_kkk']/div/div[2]/div/div/div/a[1]/h2

我试图找到如下所示的ID,但不起作用。

xpath=//input[contains(@id,'mainForm_view')]
xpath=//div[contains(@id,'mainForm_view')]

哪种方法是正确的?

谢谢。

更新

我尝试过使用如下所示的CSS选择器,但似乎要使用id元素内的另一个input

document.querySelector("input[id*='mainForm_view']").id

检查html代码,我发现我需要的id与唯一的class相关。代码如下:

  <div class="Class_p2">
     <div class="Class_p3" style="...">
        <input name="8333nd$mainForm$view$jjd$uueue2" type="text" class="class a1 n1-Control" value="xyz" id="8333nd_mainForm_view_jjd_uueue2" disabled="disabled" style="..">
     </div>
     <input name="8333nd$mainForm$view$ttyi" type="text" disabled="disabled">
  </div>

我已经在Chrome控制台中尝试了以下Javascript代码,但无法正常工作

document.getElementsByClassName("class a1 n1-Control").id

如何获得与id=8333nd_mainForm_view_jjd_uueue2相关的Class=class a1 n1-Control

UPDATE2

我终于能够做到

document.getElementsByClassName("class a1 n1-Control")[0].id

感谢所有的帮助和时间。

2 个答案:

答案 0 :(得分:1)

您可以将 css选择器编写为:

input[id*='mainForm_view']

对于div来说应该是:

div[id*='mainForm_view']  

星号与子字符串部分匹配。

请注意,如果有任何ID包含也会被选中的 mainForm_view ,那么最好在继续操作之前检入开发人员工具。

答案 1 :(得分:0)

您可以尝试查找xpath / css定位符保持不变的其他元素,然后尝试从那里遍历到该元素。您可以使用parent,祖先,前兄弟,后兄弟关键字来遍历。希望对您有所帮助:)