【问题标题】:Selenium - How to find multiple elements using cssSelectorSelenium - 如何使用 cssSelector 查找多个元素
【发布时间】:2017-12-28 04:58:38
【问题描述】:

我想验证标签“名称”在我们的页面上显示 # 次,并且想知道如何使用 cssSelector 来查找该元素?

这是元素:

<div class="entity-label ng-binding" ng-bind-html="entity.Label">Name</div>

这是我目前拥有的,但不确定如何添加“名称”。

private By lblNameField = By.cssSelector("[class='entity-label ng-binding'][ng-bind-html='entity.Label'");

Image of my source

【问题讨论】:

  • div中的Name是文本而不是名称,你可以使用xpath和div[contains(text(), "Name")]
  • This post 可以帮到你

标签: java selenium selenium-webdriver


【解决方案1】:

从技术上讲,您可以使用 CSS 选择器进行搜索,但单独的定位器无法找到您想要的元素。您必须遍历所有元素并使用.getText() 查找包含的文本。下面是一个例子

List<WebElement> labels = driver.findElements(By.cssSelector("div.entity-label.ng-binding[ng-bind-html='entity.Label']"));
int count = 0;
for (WebElement label : labels)
{
    if (label.getText().equals("Name"))
    {
        count++;
    }
}
System.out.println(count);

更有效的方法(以及唯一定位包含文本的元素的方法)是使用 XPath。 XPath 将包含您要查找的文本,以便仅使用定位器就可以找到所有所需的元素。下面的代码将返回您要查找的元素的数量。

driver.findElements(By.xpath("//div[.='Name'][ng-bind-html='entity.Label']")).size();

【讨论】:

  • 它似乎仍然没有找到那个xpath,我仍然得到0 public int countName() { int nameCount; nameCount = driver.findElements(By.xpath("//div[.='Name'][ng-bind-html='entity.Label']")).size(); System.out.println(nameCount); return nameCount; }
  • 我想我明白了,我不得不将你的 xpath 切换到 driver.findElements(By.xpath("//*[@class='entity-label ng-binding'][. ='名称']")).size();这似乎奏效了。
  • 这很奇怪......您在问题中提供的 HTML 显示了一个 DIV ,所以应该可以工作。我会仔细检查你得到的元素是你期望的。您可以仔细检查 HTML 并更新问题是否也发生了变化。
【解决方案2】:

不,你不能。唯一的方法是使用 Xpath。使用text()='your text'contains(text(),'your text') 作为查找元素的条件。

private By lblNameField = By.xpath("//*[@class='entity-label ng-binding' and text()='Name']");

【讨论】:

  • 我也试过你的 xpath,但找不到名称字段。如果我使用 Chrome Dev 并执行 xpath,我可以找到它,但它看起来很乱 - //*[@id="ResultsData"]/div/ol/li[*]/ol/li[1]/div[1]
  • @class='entity-label ng-binding' 是不好的做法,因为这是两个不同的类,并且不能保证按此顺序出现。
  • @JeffreyNg 我忘了提到 xpath 是区分大小写的。您可能需要将“名称”更改为“名称”。
  • @SiKing 我知道。我知道如何在 Angular 中使用模板。 “类”中的值取决于实现,只有开发人员知道这一确定性。我不能说这是随机顺序。所以我打算使用与提问者相同的xpath。
猜你喜欢
  • 1970-01-01
  • 2016-02-29
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2017-12-29
  • 1970-01-01
  • 2020-04-20
相关资源
最近更新 更多