12

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

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

我正在将 Java API 用于 selenium Web 驱动程序,以下是我一直在尝试的

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 是由生成的 WebElements

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

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

4

6 回答 6

7

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

问题 - 我从原始代码中得到的 -

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

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

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

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

于 2012-10-17T11:39:18.563 回答
7

使用 javascript 执行器,例如

((JavascriptExecutor) webdriver).executeScript("document.getElementById('btn').click();");
于 2012-10-17T00:17:46.187 回答
5

在我看来,您的操作生成器有点不对劲。这是我使用的一个例子:

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();    
}
于 2012-12-29T05:18:48.857 回答
1
Actions builder = new Actions(driver);
builder.MoveToElement(menu).MoveToElement(submenu).Click().Perform();

它可以在 Chrome 下运行,但在 FF 中不起作用

于 2013-02-06T14:13:57.437 回答
0

你可以试试这个:

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

我使用这种方法将受控的显式等待添加到我的元素的实例化中。

protected WebElement getWebEl(String xpath, int waitSeconds) {
    wait = new WebDriverWait(driver, waitSeconds);
    return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)));
}
于 2019-03-19T18:59:27.113 回答
0

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

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

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

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

于 2020-09-21T12:27:14.157 回答