如何通过Selenium根据html通过onclick事件单击元素?

如何通过Selenium根据html通过onclick事件单击元素?,html,selenium,selenium-webdriver,xpath,webdriver,Html,Selenium,Selenium Webdriver,Xpath,Webdriver,我正在尝试为网页上的链接创建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">

我正在尝试为网页上的链接创建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>
我不能使用linktext,因为web应用程序可以用其他语言自定义。
非常感谢您的帮助。

您的第一个和第三个XPath将无法工作,因为您正试图找到
,以便更好地了解XPath的工作原理

在您尝试的第二个xpath中,您正试图通过
onclick
属性来定位
元素。是
元素具有该属性,而不是
元素。所以即使这样也不正确

解决方案:

在您的情况下,
元素的同级,这意味着它位于
元素下的同一节点层次结构中。因此,您应该改用此xpath:

//img[@id  ='ctl00_ContentPlaceHolder1_RadGrid1_ctl00_ctl02_ctl00_AddRecord1']/following-sibling::a
@cruisepandey指出id
ctl00\u contentplaceholder 1\u RadGrid1\u ctl00\u ctl02\u ctl00\u AddRecord1
可以是动态的,因此更稳定的定位器应该是:

//img/following-sibling::a[contains(text(),'link')]
或者@Debanjan提供的链接。

根据您通过xpath和
onclick()
事件共享给
click()
链接的HTML,您可以使用以下任一解决方案:

  • 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);\"]
    

看起来img和锚定标签是兄弟姐妹, 您是否尝试过下面的代码

//img[@id='ctl00\u contentplaceholder 1\u RadGrid1\u ctl00\u ctl02\u ctl00\u AddRecord1']/以下同级::node()[@onclick='return ShowInsertController(2);']


//a[@onclick='return ShowInsertController(2);]/previous sibling::node()[@id='ctl00\u ContentPlaceHolder1\u RadGrid1\u ctl00\u ctl02\u ctl00\u AddRecord1']

我不确定在格式化代码时如何获得-1票。人们很快就会给出-1谢谢你真的很主动的用户@Shivam MishraWhat之间的文本,在你的页面中似乎有其他相同类型的元素,id是动态的。你能提供更多的HTML以便有人帮助你吗?或者试试@DebanjanB的解决方案找到了解决方案和我的错误。最后,我使用了另一个上面的表id,并结合了xpath,对我来说最合适的xpath是//table[@id='ctl00\u contentplaceholder 1\u RadGrid1\u ctl00\u TopPager']///td//a[1]Thnx@cruisepandeyand@NarendraR感谢您积极关注我的问题。图像id看起来非常动态,可能会在任何时候更改。@cruisepandey correct,谢谢你指出。编辑了我的答案。@Shivam Mishra id ctl00\u ContentPlaceholder 1\u RadGrid1\u ctl00\u ctl02\u ctl00\u AddRecord1不是动态的。对于第二个选项,您建议我不能使用它,因为我的应用程序支持多种语言(我在最初的que中提到过),如果我用英语硬编码“链接”,那么当我用其他语言执行它时,脚本将失败。@reena ok,明白您的意思了。但是,第一个适合你,对吗?Thnx@Money Coder。第一个xpath非常适合我。很高兴它有帮助!
//td/a[@onclick=\"return ShowInsertController(2);\"]
//td/img[@alt='Add Controller' and contains(@src,'AddRecord')]//following::a[@onclick=\"return ShowInsertController(2);\"]