【问题标题】:How to find classname starting with a particular text and ending with a particular text through Selenium and Java如何通过 Selenium 和 Java 查找以特定文本开头并以特定文本结尾的类名
【发布时间】:2019-01-31 11:43:12
【问题描述】:

下面是元素,我需要找到与第一个 css- 匹配并以 widget 结尾的类名,我如何在 selenium 中找到它(java)?

用下面的代码试过了,还是不行

List<WebElement> list1 = driver.findElements(By.xpath("//body[starts-with(@class, 'css-')]"));
List<WebElement> list2 = driver.findElements(By.xpath("//body[contains(@class, 'css-')]"));
List<WebElement> list3 = driver.findElements(By.xpath("//body[ends-with(@class, 'widget')]"));

【问题讨论】:

  • “它不起作用”是什么意思?发布您的错误消息或解释它如何没有达到您想要的效果。是否有一个实际的BODY HTML 标记来保存这些部分类名,或者它是其他一些 HTML 标记吗?如果您正在寻找任何标签,请将* 换成BODY,例如//*[starts-with(@class, 'css-')].

标签: java selenium xpath css-selectors xpath-1.0


【解决方案1】:

我使用 CSS 选择器来查找任何类型的任何元素:

driver.findElements(By.CssSelector("[class^='css-'][class$='widget']"))

我们可以找到任何元素,它具有使用 [] 的 class 属性,以 ^= 开头并以 $= 结尾

要找到一个 div:

driver.findElements(By.CssSelector("div[class^='css-'][class$='widget']"))

【讨论】:

    【解决方案2】:

    @elworthy 的回答是关于您可以使用的 CssSelector 的正确方向,并且根据您的代码试验,以下应该可以工作:

    List<WebElement> list3 = driver.findElements(By.CssSelector("//body[class^='css-'][class$='widget']"));
    

    但是如果你想构建一个 xpath 值得一提的是 Selenium 支持 xpath v1.0 并且ends-with() 是其中的一部分xpath v2.0。所以等效的 xpath 将是:

    List<WebElement> list1 = driver.findElements(By.xpath("//body[starts-with(@class, 'css-') and contains(@class, 'widget')]"));
    

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2021-03-23
      相关资源
      最近更新 更多