Как навести курсор мыши на невидимый элемент, используя selenium webdriver?

На моей странице HTML есть невидимый элемент, который становится видимым, когда на элементе мыши наведен курсор мыши. Что мне нужно сделать, это

  • Наведите указатель мыши на элемент
  • Нажмите на элемент (он отобразит 4 варианта)
  • Нажмите на одну из опций

Я использую Java API для веб-драйвера selenium, и вот что я пытался

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

subMenuBTN.click();
  • MainMenuBTN = элемент, который становится видимым при наведении мыши над ним
  • subMenuBTN = элемент, который выбирается из параметров меню которые отображаются

Что происходит, щелчок() на MainMenuBTN генерирует исключение ElementNotVisible. Я пробовал следовать, чтобы избежать этого, но не работал.

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

subMenuBTN.click();

A Примечание: mainMenuBTN и subMenuBTN являются WebElements, сгенерированными

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

Я что-то пропустил? Помогите оценить!

Ответ 1

с помощью javascript-исполнителя, например

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

Ответ 2

Хорошо, много раз повторяя ваши вопросы и меняя свои ответы, я поеду -

Проблема - что я получил от исходного кода -

Вам нужно переместить курсор в mainMenuBTN (который невидим, а не тот элемент, который становится видимым при наведении указателя мыши на него), и затем отображается subMenuBTN, который вам нужно щелкнуть.

Единственное редактирование исходного кода по умолчанию - это добавить оператор, чтобы переместить курсор на ваш subMenuBTN, прежде чем щелкнуть его. Этот способ отлично подходит для меня, когда мне нужно щелкнуть элемент подменю.

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

Пожалуйста, дайте мне знать, если это так.

Ответ 3

Создатель ваших действий выглядит несколько неправильно. Вот пример, который я использую:

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

Ответ 4

Actions builder = new Actions(driver);
builder.MoveToElement(menu).MoveToElement(submenu).Click().Perform();

Он работает под Chrome, но не работает в FF