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

MeP*_*kar 11 java selenium-webdriver

我的HTML页面上有一个不可见的元素,当在元素上完成鼠标悬停时,该元素变为可见.我要做的是

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

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

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

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

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

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

subMenuBTN.click();
Run Code Online (Sandbox Code Playgroud)

注意:mainMenuBTN和subMenuBTN是由WebElements生成的

driver.findElement(By.xpath("xpath_string"))
Run Code Online (Sandbox Code Playgroud)

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

Ama*_*war 7

使用javascript执行器之类的

((JavascriptExecutor) webdriver).executeScript("document.getElementById('btn').click();");
Run Code Online (Sandbox Code Playgroud)


som*_*guy 5

好吧,经过多次问题并多次改变我的答案后,我会去 -

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

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

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

Actions builder = new Actions(driver);
builder.moveToElement(mainMenuBTN).build().perform();
builder.moveToElement(subMenuBTN).build().perform();
subMenuBTN.click();
Run Code Online (Sandbox Code Playgroud)

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


dja*_*fan 5

你的 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();    
}
Run Code Online (Sandbox Code Playgroud)