代码之家  ›  专栏  ›  技术社区  ›  Neil Pemberton

css选择器-在子项(ren)中搜索唯一值

  •  1
  • Neil Pemberton  · 技术社区  · 7 年前

    我正在为一个web应用程序编写selenium测试。应用程序使用动态构建的表单,这意味着我有很多非唯一的元素来尝试和遍历(id很少,或者非常顶级)。这些表单也可以根据设置进行更改(元素的位置可能不同,因此第n个子元素不可靠)。

    我想通过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)导航到它的父级,因为它们的显示顺序可能会有所不同。例如,在另一个场景中,它可能是第n个子(2)。

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

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

    但是,在另一个场景中,顶级父级可能是第n个子级(2),因此这将不再工作。

    有没有什么css选择器魔术我可以使用,以确保我总是可以找到这个元素的唯一值,无论在列表中它的父元素出现在哪里?

    提前谢谢!

    2 回复  |  直到 7 年前
        1
  •  0
  •   Leonid Z    7 年前

    如果我正确地发现了问题,下面是您要查找的选择器:

    '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")'
    

    对你有用吗?

        2
  •  0
  •   Neil Pemberton    7 年前

    哦,我的话。我想我无意中找到了答案,这是我从未想过的。

    因此,在我的css选择器中,我总是使用“>”分隔元素,我总是认为这是分隔元素的语法。不过,请阅读“>”是前一个元素的直接子元素!

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

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

    推荐文章