好的,我有一组没有一致ID的元素但是它们确实有一个长的onclick,它有一个唯一的标识符,见下文。这些元素可以重叠,所以我不想尝试使用CSS样式选择器。
<a href="#" onclick="fireEntrySelected('scheduleFrm',
'scheduleFrm:selectableClassType', '12345678901234567890123456789123_12');"
class="selectableClassType" style="position: absolute; height: 42px;
top: 88px; left: 5%; width: 2%; padding: 0px; overflow: hidden;
border-width: 1px; border-style: solid; border-color: rgb(255, 235, 205);
background-color: rgb(255, 235, 205); display: inline-block;"
id="__autoIdNumXwhereXchangingOnReloads">
<span class="title" style="line-height: 15px;">
Title information that can be repeated on the page</span>
</a>
我需要循环完成这些约会中的每一项,这样我才能做 点击它是这样的:
driver2.FindElement(By.XPath(@"//*[contains(onclick,'12345678901234567890123456789123_12')]")).click()
哪个失败了没有这样的元素,我已经验证了该页面上显示的数字只有一次。我在ChromeDriver
的{{1}}使用selenium
,所以:
c#
selenium webdriver C#
选择器提供了良好的资源我可能错过了一些明显的内容,但我没有找到好的文档。 在正面,我意识到我可以做java调用,所以我有一个hackish的答案,但不是一个好的。
答案 0 :(得分:1)
您缺少属性名称前的@
:
//*[contains(@onclick, '12345678901234567890123456789123_12')]
HERE^
我认为这不是一个可靠的定位器,但为了提供更好的选择,我们应该看到页面的完整HTML并知道您拥有哪些信息并可以用来定位元素。
答案 1 :(得分:1)
哪个选择器会获得此元素?
正如您所提到的,他们确实有一个具有唯一标识符的长时间点击,因此最佳定位器cssSelector
可以找到此元素,如下所示: -
driver2.FindElement(By.XPath("a[onclick *= '12345678901234567890123456789123_12']")).Click();
我的选择器出了什么问题?
您xpath
逻辑上不正确,您错过了在元素属性名称前添加@
,它应该如下所示: -
driver2.FindElement(By.XPath("//*[contains(@onclick,'12345678901234567890123456789123_12')]")).Click();
有没有人为C#selenium webdriver XPath选择器提供了一个很好的资源我可能错过了一些明显的东西,但我还没有找到好的文档