4

我在尝试使用 Selenium Webdriver 单击超链接时遇到问题。我尝试使用 CssSelector 以及 XPath,但似乎没有任何效果。我要做的就是点击谷歌文本。

    <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']")).Click(); 我还尝试使用 href 来查找链接...几乎所有内容。一直以来,我都遇到“无法找到元素”异常。有人有什么建议吗?

4

4 回答 4

6

尝试这个:

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

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

driver.SwitchTo().Frame("frameID");
于 2013-09-27T22:05:23.570 回答
2

您可以使用

driver.FindElement(By.LinkText("Google")).Click();
于 2015-05-04T08:49:10.317 回答
1

您可以通过 id 轻松找到:

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

或者你可以在你的场景中使用这个 xpath:

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

您可以直接通过 id 找到元素,这是一种简单有效的方法。我希望你能通过任何这些代码片段获得你想要的点击,两者应该是一样的。肯定会奏效的。

于 2014-05-22T10:02:36.587 回答
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该类无法像对输入元素(例如按钮)所做的那样确定链接的“可点击性”,所以它不会抛出 aTimeoutException并允许您的测试单击死(禁用)链接。因此,对于专门的超链接,您必须要么搜索带有href属性的锚标记,要么测试点击的结果(即 URL 的变化)。

您应该尽量避免的另一件事是使用//*来定位网络元素。您可能会遇到一种情况,即会找到多个元素,并且最终会与不正确的元素进行交互。

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

于 2019-06-04T20:13:10.980 回答