使用Selenium Webdriver单击超链接

时间:2013-09-27 22:03:46

标签: xpath selenium

尝试使用Selenium Webdriver点击超链接时遇到问题。我尝试使用CssSelector以及XPath,似乎没有任何工作。我要做的就是点击Google文字。

    <div class="hello">
    <div class="test">
    <table class="first first-table">
    <tbody>
    <tr>
    <td class="second-table">
    <a id="dummyID" href="https://www.google.com" target="_blank">Google</a>
   </td>
   </tr>
  </tbody>
  </table>`

我尝试了driver.FindElement(By.XPath(“// * [@ id ='dummyID']”))。点击();我也尝试使用href来找到链接......几乎所有东西。我一直“无法找到元素”异常。有人有什么建议吗?

4 个答案:

答案 0 :(得分:6)

试试这个:

driver.FindElement(By.LinkText("Google")).Click();

查看元素是否在框架或iframe中。如果是,您需要使用:

driver.SwitchTo().Frame("frameID");

答案 1 :(得分:2)

您可以使用

driver.FindElement(By.LinkText("Google")).Click();

答案 2 :(得分:1)

您可以通过ID轻松找到:

driver.FindElement(By.id("dummyID")).Click();

或者您可以在场景中使用此xpath:

driver.FindElement(By.XPath("//a[@id='dummyID']")).Click();

您可以通过id直接找到元素,这是一种简单有效的方法。 我希望您可以使用任何这些代码片段获得所需的点击,两者都应该相同。当然它会起作用。

答案 3 :(得分:0)

任何提议的解决方案都不会每次都起作用。超链接不能像其他可单击的Web元素(例如按钮)那样对待。通过从锚标记中删除href属性来禁用超链接。对于其他组件,Web驱动程序可以询问找到的Web元素,以查看其是否已启用或可单击。请考虑以下情形:

<a id="dummyID" target="_blank">Google</a>

WebElement element = new WebDriverWait(driver, 1).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[text()='Google']")));
element.click();

由于ExpectedConditions类无法像使用输入元素(例如按钮)那样确定链接的“可点击性”,因此不会抛出TimeoutException并允许单击无效(禁用)链接的测试。因此,对于专有超链接,您必须搜索其中具有href属性的锚标记,或者测试单击的结果(即URL更改)。

您应该避免的另一件事是使用//*来定位Web元素。您可能会遇到以下情况:将发现一个以上的元素,并且最终将与不正确的元素进行交互。

最后,driver.FindElement(...)的问题在于,如果页面没有完全加载(除非您设置了某种隐式等待),您可能会遇到NoSuchElement异常的问题。通过使用显式等待,等待元素与之交互的首选方法,例如我上面提供的Java示例。由于我不知道您遇到了什么问题,因此我不得不假设这可能是您的问题。如果这不是问题,则在这种情况下元素可能位于iframe中,那么您需要在与元素进行交互之前告诉Web驱动程序切换到正确的iframe