23

我有一个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: Element is not currently visible and so may not be interacted with
Command duration or timeout: 13 milliseconds

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

4

11 回答 11

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

上面的行工作正常。请去掉href后面的空格。

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

于 2015-06-04T09:17:25.360 回答
11

利用

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);

详细答案,查看此帖

于 2015-06-04T05:00:14.400 回答
4

这是你的代码:

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

你错过了引号

它应该如下

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

希望这可以帮助!

于 2019-11-27T07:30:34.360 回答
3

wait对这样的元素使用显式:

WebDriverWait wait1 = new WebDriverWait(driver, 500);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("path of element"))).click();
于 2018-02-25T17:20:46.780 回答
2

好像a标签被隐藏了。记住 Selenium 不能与隐藏元素交互。Javascript在这种情况下是唯一的选择。

By css = By.cssSelector("a[href='/docs/configuration']");
WebElement element = driver.findElement(css);
((JavascriptExecutor)driver).executeScript("arguments[0].click();" , element);
于 2015-06-04T05:02:49.287 回答
1

尝试使用 Action 类到达元素

Actions action = new Actions(driver);
action.MoveToElement(driver.findElement(By.xpath("//a[text()='AppConfiguration']")));
action.Perform();
于 2019-09-10T10:15:16.097 回答
1

如何在不使用 selenum 中的单击方法的情况下单击链接?

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

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);
于 2019-08-09T07:12:21.067 回答
1

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

这是你的svg:

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

然后这样做:

driver.findElement(By.id("element-id")).click();
于 2021-05-04T12:43:47.510 回答
0

您可以使用此方法:

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

driver.findElement(By.linkText("App Configuration")).click();
于 2016-11-22T07:47:58.683 回答
0

要将click()带有文本的元素作为应用程序配置,您可以使用以下任一定位器策略

  • 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()在您需要诱导WebDriverWait的元素上elementToBeClickable(),您可以使用以下任一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();
    

参考

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

于 2020-11-16T10:49:49.793 回答
-1

你可以使用xpath如下,试试这个:

driver.findElement(By.xpath("(.//[@href='/docs/configuration'])")).click();
于 2018-02-22T05:54:29.723 回答