尝试使用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来找到链接......几乎所有东西。我一直“无法找到元素”异常。有人有什么建议吗?
答案 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
。