【问题标题】:Using multiple criteria to find a WebElement in Selenium使用多个条件在 Selenium 中查找 WebElement
【发布时间】:2015-05-22 18:20:12
【问题描述】:

我正在使用 Selenium 测试一个网站,如果我发现和元素符合多个标准,这是否有效?例如:

 driverChrome.findElements(By.tagName("input").id("id_Start"));

driverChrome.findElements(By.tagName("input").id("id_Start").className("blabla"));

【问题讨论】:

  • 我也想知道这一点,发现不支持链接很愚蠢。

标签: java selenium selenium-webdriver


【解决方案1】:

不,它没有。您不能像这样连接/添加选择器。这无论如何都是无效的。但是,您可以编写覆盖所有场景的选择器,并将其与findElements()一起使用

By byXpath = By.xpath("//input[(@id='id_Start') and (@class = 'blabla')]")
List<WebElement> elements = driver.findElements(byXpath);

这应该会返回一个带有 input 标签的元素列表,标签具有类名称 blablaid id_Start

【讨论】:

  • is "//input[(@id='id_Start') and (@class= 'blabla')]" 一个正则表达式?
  • 这只是使用多个条件的方式。不是正则表达式
【解决方案2】:

要组合 By 语句,请使用 ByChained:

driverChrome.findElements(
    new ByChained(
        By.tagName("input"),
        By.id("id_Start"),
        By.className("blabla")
    )
)

但是,如果条件引用相同的元素,请参阅@Saifur 的回答。

【讨论】:

  • 这不是公认的答案吗?如果标签、ID 和类都引用同一个元素,那么这确实允许使用多个选择器。我更喜欢使用 XPath(或类似的东西),因为它更简洁,更清楚地描述了我正在寻找的元素。
【解决方案3】:

CSS 选择器在这种情况下是完美的。

你的例子会

By.css("input#id_start.blabla")

如果您搜索 CSS 选择器,就会有很多信息。此外,在处理类时,CSS 比 XPath 更容易,因为 Xpath 将类视为文字字符串,而 CSS 将其视为以空格分隔的集合

【讨论】:

    【解决方案4】:

    基于@George 的回复,C# 的代码相同:

    //reference
    using OpenQA.Selenium.Support.PageObjects;
    
    ...
    
    int allElements = _driver.FindElements(new ByChained(
                        By.CssSelector(".sc-pAyMl.cnszJw"),
                        By.Id("base-field")
                        )).Count();
    

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2018-12-01
      • 2018-07-21
      • 2020-06-08
      • 1970-01-01
      • 2017-02-01
      • 2020-02-28
      • 2015-10-18
      • 1970-01-01
      相关资源
      最近更新 更多