2017-07-13 13 views
0

我一直在尝试各种定位器,并找不到一个简单的解决方案来定位在C#Selenium中的跨度内的数字(这是动态的,并改变每个页面加载)。我只是试图找到跨度本身开始。C#中的Selenium如何根据其值定位此跨度?

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

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

上一个与上下文相关的事物:这个范围和它的数量位于一个小部件内部,我已经能够找到它了。该小部件没有唯一的类或id,而是自定义的标签名称,所以我只能使用FindElement(By.TagName(“inventorySearch”))来可靠地找到它,它可以工作。如果有一种方法,我可以使用一个CSS选择器来启动该widget元素(父项) - 然后链接到它内部的跨度(每个实例中只有一个跨度,因此很容易找到),那会解决它。我的问题是,我不知道如何在Seleniums CSS选择器内指示标记名(即类和Id的。#符号 - 在C#Selenium中是否存在相同的标记名)?谢谢。

回答

1

回答标题,则可以通过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选择器自定义标签名称。这也是可能的。

考虑下面的HTML:

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

要选择<span><inventorySearch>元素中,使用下面的CSS选择器:

inventorySearch > span 
+0

谢谢@BUDI - 我和你最后一个例子一起工作(它对我来说根本不会发生这样的情况,即自定义标签名称将仅在CSS选择器中表示为他们的名字,没有符号等等。那么简单,我没有甚至考虑它!)非常感谢,严。 – user5071447

0

这也可以使用CSS

jQuery有a:包含伪选择器

即跨度:包含('129')

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

安装,包装Selenium.WebDriver.Extensions

这使访问滋滋声jQuery选择引擎,提供伪选择器支持。