我正在尝试为网页上的链接添加xpath。 链接的HTML如下所示:
<td style="width: 50%; text-align: right; vertical-align: middle">
<img id="ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1"
alt="Add Controller" src="../Images/AddRecord.gif">
<a onclick="return ShowInsertController(2);" href="#">link</a>
</td>
有些我无法获得正确的xpath。 我尝试了以下方法:
xpath = //img[@id ='ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1']/a -->Didnt work
xpath = //td[contains(@onclick, 'return ShowInsertController(2);')] --> Didnt work
xpath = //img[@id ='ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1']/a[1] -->Didnt work
我无法使用链接文本,因为可以用其他语言自定义Web应用程序。 任何帮助都非常感谢。
答案 0 :(得分:1)
根据 HTML ,您已通过 xpath在链接上共享给click()
,文本为 link 和onclick()
事件,您可以使用以下任一解决方案:
xpath 1
:
//td/a[@onclick=\"return ShowInsertController(2);\"]
xpath 2
:
//td/img[@alt='Add Controller' and contains(@src,'AddRecord')]//following::a[@onclick=\"return ShowInsertController(2);\"]
答案 1 :(得分:1)
看起来img和anchor标签是兄弟姐妹, 您是否尝试过以下代码?
//img[@id = 'ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1']/following-sibling::node()[@onclick = 'return ShowInsertController(2);']
OR
//a[@onclick = 'return ShowInsertController(2);']/preceding-sibling::node()[@id = 'ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1']
答案 2 :(得分:0)
您的第一个和第三个xpath无效,因为您试图查找<a>
元素的 child 的<img>
元素。如果您输入:
//img[whatever]/a
对于它意味着的代码,搜索<a>
定位符的<img>
元素的第一个子元素whatever
。阅读online tutorials,以更好地了解xpath的工作原理。
来到您尝试的第二个xpath,您正在尝试借助<td>
属性来定位onclick
元素。其<a>
元素具有该元素,而不是<td>
元素。所以即使那是不正确的。
解决方案:
在您的情况下,<a>
是<img>
元素的兄弟,这意味着它被放置在<img>
元素的下一个(而不是下方)相同的节点层次结构中。因此,您应该改用以下xpath:
//img[@id ='ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1']/following-sibling::a
@cruisepandey指出ID ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1
可以是动态的,因此应该更稳定的定位符应该是正确的:
//img/following-sibling::a[contains(text(),'link')]
或者@Debanjan提供的。