【问题标题】:How select an attribute inside list using css selector and Selenium如何使用 css 选择器和 Selenium 在列表中选择一个属性
【发布时间】:2014-07-31 04:30:29
【问题描述】:

我正在尝试使用 css 选择器通过 Selenium 获取 <li> 内的元素

我有:

<div id= "popup">
  <ul>
     <li>
        <div id="item" option= "1" ....> </div>
     </li>
     <li>
        <div id="item" option= "2" ....> </div>
     </li>
  </ul>
 </div>

我需要使用 option=2 获取第二个 div。我试过了:

webdriver.findElement(By.cssSelector("#popup > ul li:nth-child(n) [option=2]");

在 Chrome 的控制台中可以正常工作,但在 Selenium 中却不行:/这有什么问题?

【问题讨论】:

    标签: html selenium css-selectors


    【解决方案1】:

    两个问题:

    • :nth-child(n) 表示“any 的 n 值”,这将导致 每个 孩子都被匹配。如果您想确保只获得第二个li 下的元素,您可能意味着使用:nth-child(2)。或者,如果它出现在哪个 li 中并不重要,您可以完全摆脱 :nth-child() 选择器。

    • 如果属性选择器中的值以数字开头,则必须用引号引起来,因此[option='2']

    因此,正确的选择器是:

    webdriver.findElement(By.cssSelector("#popup > ul li:nth-child(2) [option='2']");
    

    【讨论】:

    • 是的 "#popup > ul li:nth-child(2) [option='2']" 工作正常,但我需要使用 [option='2'] 选择元素,但我不知道在列表中的位置。 :nth-child() 不起作用。最后我使用:“#popup > ul li [option='2']”并且在控制台和硒中工作正常
    • @bott:我在回答中确实提到了这一点。我知道我应该添加另一个选项来解释以防万一......
    【解决方案2】:

    使用:

    "#popup > ul li [option='2']"
    

    在控制台和 selenium 中运行良好!

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2023-03-28
      • 2013-06-10
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多