【问题标题】:How to find element that has multiple class in selenium如何在硒中找到具有多个类的元素
【发布时间】:2018-07-06 06:58:18
【问题描述】:

我有一个包含 3 个类的元素,我需要用 selenium 找到它们

<button style="padding:2px 7px; background-color:#4caeea" 
  class="btn btn-xs btn-custom" </button>

我找不到它:By.classname("btn btn-xs btn-custom")

我不想使用 xpath & cssSelector 。 我还有什么其他选择?

【问题讨论】:

  • 您的具体用例是什么?为什么要避开cssSelectorxpath
  • 因为,Xpath 是使用元素的相对路径/位置创建的,因此如果在网页中引入新元素,Xpath 总是有可能发生变化,这将导致测试用例不必要的失败。如果我们谈论性能,那么在 Xpath 中查找元素会有点慢。
  • @Shubham.b007 你应该了解绝对xpath,相对xpath永远不会受到在网页中引入新元素的影响。使用相对 xpath 总是好的做法。
  • 另外,如果能添加Button标签的父元素就好了。
  • 感谢@Ishita Shah 明白了。

标签: selenium selenium-webdriver xpath


【解决方案1】:

这个By.classname("btn btn-xs btn-custom") 不起作用,因为它包含多个空格,这意味着它是 3 个类的组合。

你将不得不切换到 css 选择器或 xpath ,我不知道你为什么提到你不想同时使用它们。

但是,如果您有兴趣使用 css 选择器

你可以试试这个:

By.cssSelector("btn.btn-xs.btn-custom")  

如果你按优先顺序去:

  1. 身份证
  2. 姓名
  3. 类名
  4. 链接文本
  5. partialLinkText
  6. 标签名
  7. CSS 选择器
  8. xpath

【讨论】:

  • 好的@cruisepandey。实际上,我想知道没有 xpath/cssSelector 有什么方法可以找到它。
  • 在这种情况下,我没有看到任何链接,也没有看到 ID、名称、类名(因为有空格),因此无法使用 IMO 前 6 名。不过,我认为使用 css 选择器没有任何危害。
【解决方案2】:

这个元素的class属性...

<button style="padding:2px 7px; background-color:#4caeea" 
  class="btn btn-xs btn-custom" </button>
  

包含多个类名。

使用By.classname("btn btn-xs btn-custom"),您将无法将其定位为:

根据“class”属性的值查找元素。如果一个元素有多个类,那么这将匹配每个类。例如,如果值为“one two onone”,则类名“one”和“two”将匹配。

根据您的要求,避免 您仍然可以使用 classname 但该元素可能不是第一个/唯一匹配项。举个例子:

  • By.classname("btn") //将匹配所有包含类名 btn 的元素
  • By.classname("btn-xs") //将匹配所有包含类名 btn-xs 的元素
  • By.classname("btn-custom") //将匹配所有包含类名 btn-custom 的元素

您也可以使用以下Locator Strategies

  • cssSelector

    By.cssSelector("button.btn.btn-xs.btn-custom")

  • xpath

    By.xpath("//button[@class='btn btn-xs btn-custom']")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多