如何使用Selenium单击href链接

时间:2015-06-04 04:57:52

标签: java selenium xpath

我有一个 html href链接

<a href="/docs/configuration">App Configuration</a>

使用Selenium我需要点击链接。目前,我正在使用以下代码 -

Driver.findElement(By.xpath("//a[text()='App Configuration']")).click(); 

但它没有重定向到页面。我也试过下面的代码 -

 Driver.findElement(By.xpath(//a[@href ='/docs/configuration']")).click();

但这是抛出异常 -

  

org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互       命令持续时间或超时:13毫秒

链接可见,页面已完全加载。我不知道我的代码有什么问题。

11 个答案:

答案 0 :(得分:21)

 webDriver.findElement(By.xpath("//a[@href='/docs/configuration']")).click();

以上行正常。请在href之后删除空格。

该元素是否在页面中可见,如果该元素不可见,请向下滚动页面然后执行点击操作。

答案 1 :(得分:9)

使用

driver.findElement(By.linkText("App Configuration")).click()

其他方法将是

JavascriptLibrary jsLib = new JavascriptLibrary(); 
jsLib.callEmbeddedSelenium(selenium, "triggerMouseEventAt", elementToClick,"click", "0,0");

((JavascriptExecutor) driver).executeScript("arguments[0].click();", elementToClick);

详细解答,View this post

答案 2 :(得分:3)

对这样的元素使用显式wait

WebDriverWait wait1 = new WebDriverWait(driver, 500);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("path of element"))).click();

答案 3 :(得分:1)

  

如何在不使用硒的点击方法的情况下点击链接?

这是一个棘手的问题。请按照以下步骤操作:

driver.get("https://www.google.com");
String gmaillink= driver.findElement(By.xpath("//a[@href='https://mail.google.com/mail/?tab=wm&ogbl']")).getAttribute("href");
System.out.println(gmaillink);
driver.get(gmaillink);

答案 4 :(得分:1)

尝试使用Action类访问元素

Actions action = new Actions(driver);
action.MoveToElement(driver.findElement(By.xpath("//a[text()='AppConfiguration']")));
action.Perform();

答案 5 :(得分:0)

似乎隐藏了a标记。记住Selenium无法与隐藏元素进行交互。在这种情况下,Javascript是唯一的选择。

By css = By.cssSelector("a[href='/docs/configuration']");
WebElement element = driver.findElement(css);
((JavascriptExecutor)driver).executeScript("arguments[0].click();" , element);

答案 6 :(得分:0)

您可以使用此方法:

对于使用linkText();的链接,它比任何其他定位器更有效。

driver.findElement(By.linkText("App Configuration")).click();

答案 7 :(得分:0)

Thi是您的代码:

Driver.findElement(By.xpath(//a[@href ='/docs/configuration']")).click();

您错过了引号

应如下所示

Driver.findElement(By.xpath("//a[@href='/docs/configuration']")).click();

希望这会有所帮助!

答案 8 :(得分:0)

要对元素为click()(文本为应用程序配置),可以使用以下任一Locator Strategies

  • linkText

    driver.findElement(By.linkText("App Configuration")).click();
    
  • cssSelector

    driver.findElement(By.cssSelector("a[href='/docs/configuration']")).click();
    
  • xpath

    driver.findElement(By.xpath("//a[@href='/docs/configuration' and text()='App Configuration']")).click();
    

理想情况下,对于元素上的click(),您需要为elementToBeClickable()引入WebDriverWait,并且可以使用以下Locator Strategies之一:

  • linkText

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("App Configuration"))).click();
    
  • cssSelector

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[href='/docs/configuration']"))).click();
    
  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@href='/docs/configuration' and text()='App Configuration']"))).click();
    

参考文献

您可以在以下位置找到几个相关的详细讨论:

答案 9 :(得分:0)

这些答案似乎有点太复杂了。这对我有用。 给 svg 标签一个 id,然后通过该 id 查找元素:

这是你的 svg:

<svg id="element-id"><use href="/...."></use></svg>

然后这样做:

driver.findElement(By.id("element-id")).click();

答案 10 :(得分:-1)

您可以按如下方式使用xpath,试试这个:

driver.findElement(By.xpath("(.//[@href='/docs/configuration'])")).click();