1

我正在为 Web 应用程序编写硒测试。该应用程序使用动态构建的表单,这意味着我有很多非唯一元素要尝试和遍历(#ids 很少,或者非常顶级)。这些形式也可以根据设置而改变(元素的位置可以不同,因此 nth-child 是不可靠的)。

我想通过这些拥有的 unqiue 类名找到一些字段,但是它们被埋在非唯一元素中。我需要一种方法通过它们的唯一值(不是#id)来定位这些元素,这样它们在表单上的位置就不会影响 selenium 找到它们。我不知道该怎么做。

希望这可以解释这种情况:

<Some non-unqiue Div>
  <child>
    <child>
      <unique value 1>
<Some non-unqiue Div>
  <child>
    <child>
     <unique value 2>
<Some non-unqiue Div>
  <child>
    <child>
      <unique value I WANT THIS ONE>
<Some non-unqiue Div>
  <child>
    <child>
      <unique value 4>

您可以在此处看到我想要的元素具有我想要匹配的唯一值。但是,我不能使用 nth-child(3) 导航到其父级,因为它们出现的顺序可能会有所不同。例如,在不同的场景中,它可能是 nth-child(2)。

因此,可能适用于上述情况的选择器可能如下所示:

Some.nth-child(3) > child > child > [unique*=\"I WANT THIS ONE\"]

但是,在另一种情况下,最高父级可能是 nth-child(2),因此这将不再起作用。

我可以使用任何 Css 选择器魔法来确保我始终可以通过其唯一值找到这个元素,而不管它的父元素出现在列表中的哪个位置?

提前致谢!

4

2 回答 2

0

如果我以正确的方式发现问题,这里是您正在寻找的选择器:

'element/id/class:contains("I WANT THIS ONE")'

或对于输入类型:

'element/id/class[value="I WANT THIS ONE"]'

例如:

'input[value="I WANT THIS ONE"]'

或者对于带有 innerHTML 的元素:

'div:contains("I WANT THIS ONE")'

或者对于他们两个:

'input[value="I WANT THIS ONE"],div:contains("I WANT THIS ONE")'

它对你有用吗?

于 2018-06-06T14:48:18.383 回答
0

哦,我的话。我想我偶然发现了答案,这是我从未想过的。

所以在我的 Css 选择器中,我一直使用 ">" 来分隔我的元素,我一直认为这是分隔它们的语法。但是,请阅读“>”是针对前一个元素的直接子元素的!

如果您使用空格而不是“>”,那么它会在该元素下方的整个树中搜索您要查找的值!我在自动化方面有点自学,我不敢相信我没有意识到这是一件事。

刚刚尝试了一个类似于“#myId [value="my value"]”的选择器,使用空格分隔两个元素,它搜索了整个树并正确地落在了我的元素上。

于 2018-06-06T15:57:02.997 回答