【问题标题】:Crafting a CSS selector to find unique values for multiple elements with the same name制作 CSS 选择器以查找多个同名元素的唯一值
【发布时间】:2024-04-23 11:45:02
【问题描述】:

我在页面布局上有 6 个按钮,都称为“添加内容”和所有类“addContent”。
我必须使用 Webdriver 依次单击每个,然后执行单独的任务。据我所知,每个按钮唯一的唯一属性是它们位于具有唯一 ID 号的 div 中。然而,按钮被埋得很深。按钮一示例:-

   <div id="1405365670286" class="row_item empty_row span_3col ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
    <div class="controls span_3col" style="display: none;">
      <ul>
        <li>
           <a class="edit" href="" title="Edit" style="display: none;">Edit</a>
        </li>
        <li>
           <a class="remove" href="" title="Remove">Remove</a>
        </li>
     </ul>
  </div>
  <div id="" class="tile nocontent">
     <a id="AddContents" class="addContent actionButton button" href="">Add content</a>
  </div>

  1. 谁能给我一个 cssselector 来访问这个按钮?
  2. 是否有一种更简洁的方法可以让 Webdriver 访问每个按钮并知道哪个按钮被引用?也许通过创建一个 WebElement 列表并给每个元素一个索引?

【问题讨论】:

  • 您可以使用 XPath 将您的搜索基于“元素周围的内容”。我的意思是让一个元素紧挨着另一个元素。那么,例如,“添加内容”按钮总是靠近“编辑”和“删除”按钮吗?他们会改变吗?

标签: html selenium collections selenium-webdriver css-selectors


【解决方案1】:

你可以使用findElements():

List<WebElement> buttons = driver.findElements(By.cssSelector("#AddContents"));

然后您可以使用列表,并按索引访问按钮。

【讨论】:

  • 我已经尝试过了,但是当我这样做时: System.out.println(buttons.size());它总是以 0 的形式返回?
  • 在问题中提到所有按钮都有“addContent”类。所以只需在这里使用By.className("addContent")
  • 好的,这是一个同步问题。
  • @Steerpike 10 个硒问题中有 9 个是同步问题 :-)
最近更新 更多