C# 中的 Selenium 如何根据其值定位此跨度?

How can Selenium in C# locate this span based on its value?

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

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

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

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

回答标题中的问题,可以通过 XPath:

找到带有文本 '129<span>
//span[text()='129']

但是我怀疑这个数字会改变,因此您可能还需要考虑将 <span> 定位到其 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 select 或自定义 tag-name。这也是可以的。

给出以下 HTML:

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

到 select <inventorySearch> 元素中的 <span>,使用以下 CSS select 或:

inventorySearch > span

这也可以使用 CSS

JQuery 有一个 :contains 伪选择器

即span:contains('129')

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

安装包Selenium.WebDriver.Extensions

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