我有一个 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毫秒
链接可见,页面已完全加载。我不知道我的代码有什么问题。
答案 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();