繁体   English   中英

如何使用 selenium webdriver 悬停并单击不可见的元素?

[英]How to Hover over and click on an invisible element using selenium webdriver?

我的 HTML 页面上有一个不可见的元素,当鼠标悬停在该元素上时,该元素就会变得可见。 我要做的是

  1. 将鼠标悬停在元素上
  2. 单击元素(它将显示 4 个选项)
  3. 单击其中一个选项

我正在为 selenium 网络驱动程序使用 Java API,以下是我一直在尝试的

Actions builder = new Actions(driver);
builder.moveToElement(MainMenuBTN).click().build().perform();

subMenuBTN.click();
  1. MainMenuBTN = 将鼠标悬停在其上时变为可见的元素
  2. subMenuBTN = 从显示的菜单选项中选择的元素

发生的事情是,MainMenuBTN 上的 click() 正在生成 ElementNotVisible 异常。 我试着跟随以避免这种情况,但没有奏效。

Actions builder = new Actions(driver);
builder.moveToElement(mainMenuBTN).build().perform();
builder.click();

subMenuBTN.click();

注意:mainMenuBTN 和 subMenuBTN 是由

driver.findElement(By.xpath("xpath_string"))

我错过了什么吗? 帮助赞赏!

使用 javascript 执行器

((JavascriptExecutor) webdriver).executeScript("document.getElementById('btn').click();");

好吧,在多次回答你的问题并多次更改我的答案之后,我会 -

问题 - 我从原始代码中得到了什么 -

您需要将光标移动到 mainMenuBTN(这是可见的,而不是当您将鼠标悬停在它上面时变得可见的元素),然后显示您需要单击的 subMenuBTN。

根据我对原始代码的唯一编辑是添加一条语句,在您单击它之前将光标移动到您的 subMenuBTN。 当我需要单击子菜单项时,这种方式对我来说效果很好。

Actions builder = new Actions(driver);
builder.moveToElement(mainMenuBTN).build().perform();
builder.moveToElement(subMenuBTN).build().perform();
subMenuBTN.click();

如果是这种情况,请告诉我。

在我看来,您的 Actions 生成器有点不对劲。 这是我使用的示例:

public static void mouseClickByLocator( String locator ) {    
  WebElement el = driver.findElement( By.cssSelector( locator ) );    
  Actions builder = new Actions(driver);    
  builder.moveToElement( el ).click( el );    
  builder.perform();    
}
Actions builder = new Actions(driver);
builder.MoveToElement(menu).MoveToElement(submenu).Click().Perform();

它在 Chrome 下工作,但在 FF 中不起作用

你可以试试这个:

  1. 通过它的 xpath 获取您的 WebElement。
  2. 悬停元素。
  3. 再次通过其 xpath 获取您的 WebElement。
  4. 点击它。

这是因为当您将鼠标悬停在它上面时,元素的 id 会发生变化,您应该再次找到它。

Actions builder = new Actions(driver);

WebElement mainMenuBTN = getWebEl("xpath_string",5);
builder.moveToElement(mainMenuBTN).perform();
mainMenuBTN = getWebEl("xpath_string",5);
builder.click(mainMenuBTN);

我使用此方法对元素的实例化进行 ipmlement 控制显式等待。

protected WebElement getWebEl(String xpath, int waitSeconds) {
    wait = new WebDriverWait(driver, waitSeconds);
    return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)));
}

我的情况是我们有一个行表,如果鼠标悬停在该行上,其中一列 (td) 应该显示大约 4 个图标,我们应该点击它。

Action action=new Action(driver);
action.moveToElement(hoverElt).clickAndHold().build().perform();

它对我有用。 moveToELement()将控件移动到元素

clickAndHold()点击并按住悬停的元素,方便我们对可见元素进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM