C#Selenium通过onclick()属性的参数查找元素

时间:2016-09-29 23:01:11

标签: c# selenium xpath selenium-webdriver css-selectors

好的,我有一组没有一致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,所以:

  1. 什么选择器会获得此元素?
  2. 我的选择器出了什么问题?
  3. 是否有人为c# selenium webdriver C#选择器提供了良好的资源我可能错过了一些明显的内容,但我没有找到好的文档。
  4. 在正面,我意识到我可以做java调用,所以我有一个hackish的答案,但不是一个好的。

2 个答案:

答案 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选择器提供了一个很好的资源我可能错过了一些明显的东西,但我还没有找到好的文档