【问题标题】:Selenium div attributes keep changing, how can I find this element?Selenium div 属性不断变化,我怎样才能找到这个元素?
【发布时间】:2015-07-15 02:03:09
【问题描述】:

我正在尝试使用 Selenium 和 Java 查找元素,问题是元素的 id、类和名称总是递增,因此我无法使用 selenium 找到它。以下是我目前正在尝试的:

WebElement field = driver.findElement(By.xpath("//input[contains(@linkText, 'Broadcast copy')]"));

在我的 html 文件中,这些是不断变化的属性:

id="files[%2Fopt%240%2Frules%2F%2F000102%2.xml][%2Fcluster%2Fname]"

name="files[%2Fopt%240%2Frules%2F%2F000102%2.xml][%2Fcluster%2Fname]" 

value="copy (Cluster 102)"

整个 html

<tbody>
   <tr class='rowOdd'>
      <td><b>Name</b></td>
      <td> <input type='text' data-validation='required validate-name-unique validate-name-not-empty' size='65' id='files[%2Fopt%240%2Frules%2F%2F000102%2Fcluster.xml][%2Fcluster%2Fname]' name='files[%2Fopt%240%2Frules%2F%2F000102%2Fcluster.xml][%2Fcluster%2Fname]' value='copy (Cluster 102)' /> </td>

这些总是递增的,我无权访问 html 文件来更改任何内容。所以我的问题是如何找到这个输入元素?提前致谢。

更新

我得到错误:

Unable to locate element:{"method":"id", "selector":"files[.*][.*]"}

【问题讨论】:

  • 你能提供html的父节点吗?

标签: java html selenium


【解决方案1】:

我认为您使用的 xpath 不正确。使用

//input[contains(text(), 'Broadcast copy')]

而不是

//input[contains(@linkText, 'Broadcast copy')]

根据您提供的 html,以下内容也应该可以工作

//body[contains(.,'Name')]//input

【讨论】:

  • 元素是否在任何 iframe 中?
  • 不只是在常规 div 标签内的表格内。可能是因为它正在写入一个 xml 文件吗?如果是这样,我怎样才能找到这个元素?谢谢。
  • 在输入ID中有一个“.xml”扩展名。我的问题是,这就是硒找不到元素的原因吗?
  • 我从来没有处理过这样的事情。你的意思是 xml 嵌套在 html 中?
  • 我想是的,id 似乎是 html 写入的文件。
【解决方案2】:

试试这个..

如果 value 属性中的“copy (Cluster”) 文本没有改变,那么你可以尝试下面的 xpath:-

 //body[contains(.,'Name')]//input[contains(@value,'copy (Cluster')]

【讨论】:

    【解决方案3】:

    由于 id、class 和 css 的属性在不断变化,因此“数据验证”始终保持不变。所以下面的代码对我有用。

    driver.findElement(By.xpath("//input[@data-validation='required validate-name-unique validate-name-not-empty']"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2021-09-07
      • 1970-01-01
      • 2014-04-26
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多