【问题标题】:In selenium, how do I access the second image element with the same class name, without using XPath?在 selenium 中,如何在不使用 XPath 的情况下访问具有相同类名的第二个图像元素?
【发布时间】:2016-12-23 10:55:42
【问题描述】:

我正在制作一些可重用的方法来定位页面中的图像元素。我无法通过 XPath 定位,因为每个页面上的 XPath 都不同。最好,我希望能够通过 src 访问它们,但不确定这是否可能。 C#。下面的代码显示了两个图像元素。我正在尝试访问第二个。

<span id="tube">        <img class="mode-icon" title="Train: Tube" height="42" alt="Tube" src="/images/Tube.png">  </span>

<span id="Overground">  <img class="mode-icon" title="Train: Overground" height="42" alt="Overground" src="/images/Overground.png"> </span>

【问题讨论】:

  • 显示HTML要匹配的元素示例。
  • 我已经编辑了原始帖子以包含它们。
  • 您可以使用 IReadOnlyCollection&lt;IWebElement&gt; elements = driver.FindElements(By.ClassName("mode-icon")); 按类名获取元素的集合 拥有该集合后,您可以使用 foreach 评估集合中的每个元素以找到您需要的元素。

标签: c# image selenium testing xpath


【解决方案1】:

如果您想使用src 属性进行访问,那么

使用 CSSSelector -

img[src='/images/Overground.png']

使用 XPath

//img[@src='/images/Overground.png']

如果您的页面中只有 2 个图像标签已修复,那么您也可以使用索引 -

//span[2]/img

【讨论】:

    【解决方案2】:

    首先你应该区分绝对XPath(固定,例如html/div/div/.../div/img)和相对XPath(灵活,例如//div/img[@id="some_img_id"])。良好的相对 XPath 可以匹配多个页面上的所需元素

    如果您想将目标imgsrc 属性值匹配,则可以使用以下XPath

    string imgSrc = "/images/Overground.png";
    string imgXpath = String.Format("//img[@src = {0}]", imgSrc);
    

    相同的XPath 表达式可以用于imgSrc 的任何值

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2019-11-26
      • 2014-07-12
      • 1970-01-01
      • 2022-10-31
      • 2017-09-22
      • 2018-04-12
      • 1970-01-01
      相关资源
      最近更新 更多