【问题标题】:How can Selenium in C# locate this span based on its value?C# 中的 Selenium 如何根据其值定位此跨度?
【发布时间】:2017-12-18 12:24:31
【问题描述】:

我一直在尝试各种定位器,但找不到一个简单的解决方案来在 C# Selenium 的这个范围内定位数字(这是动态的并改变每个页面加载)。我只是想找到跨度本身开始。

<span inventory="Livecount">129</span>

我得到 NoSuchElement 异常,即无法定位元素。

最后一个与上下文相关的事情:这个跨度和它的编号存在于一个小部件中,我已经能够很好地找到它。该小部件没有唯一的类或 id,而是自定义标签名称,所以我只能使用 FindElement(By.TagName("inventorySearch")) 可靠地找到它,它有效。如果有一种方法我可以使用 CSS 选择器从该小部件元素(父元素)开始 - 然后链接到其中的跨度(每个实例中只有一个跨度,因此很容易找到),那会解决它。我的问题是,我不知道如何在 Seleniums CSS 选择器中指示标记名(即类和 Id 有它们的 .# 符号 - 在 C# Selenium 中是否有等效的标记名?谢谢。

【问题讨论】:

    标签: c# css selenium css-selectors ui-automation


    【解决方案1】:

    回答标题中的问题,可以通过XPath找到带有文字'129&lt;span&gt;

    //span[text()='129']
    

    但是我怀疑这个数字会改变,因此您可能还需要考虑将&lt;span&gt; 定位在其inventory 属性等于'Livecount' 的位置:

    CSS 选择器:

    span[inventory='Livecount']
    

    XPath:

    //span[@inventory='Livecount']
    

    用法:

    driver.FindElement(By.CssSelector("span[inventory='Livecount']"));
    driver.FindElement(By.XPath("//span[@inventory='Livecount']"));
    

    解释上一个问题,您问是否可以使用带有自定义标记名的 CSS 选择器。这也是可能的。

    给定以下 HTML:

    <inventorySearch>
        <span inventory="Livecount">129</span>
    </inventorySearch>
    

    要在 &lt;inventorySearch&gt; 元素中选择 &lt;span&gt;,请使用以下 CSS 选择器:

    inventorySearch > span
    

    【讨论】:

    • 感谢@BUDI - 我使用了你的最后一个示例并且它有效(我从来没有想过自定义标签名称将在 CSS 选择器中仅表示为它们的名称,没有符号等。所以很简单,我什至没有考虑过!)非常感谢,Yan。
    【解决方案2】:

    这也可以使用 CSS

    JQuery 有一个 :contains 伪选择器

    即跨度:包含('129')

    您需要使用 Selenium NuGet 支持包来获得此功能。

    安装包 Selenium.WebDriver.Extensions

    这可以访问提供伪选择器支持的 Sizzle JQuery 选择器引擎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 2020-11-03
      相关资源
      最近更新 更多