Как навести указатель мыши на родительский элемент и затем щелкнуть дочерний элемент с помощью класса Selenium и Action

Я написал тест, чтобы навести указатель мыши на элемент, под которым есть ссылка, и щелкнуть подэлемент. Я продолжаю получать исключение NullPointerException. Раньше он работал и снова перестал работать.

Actions mouseHover = new Actions(driver);
mouseHover.moveToElement(ParentElement);
mouseHover.moveToElement(subElement);
mouseHover.click(subElement);

person user9790882    schedule 18.09.2018    source источник
comment
Поделиться трассировкой стека исключений?   -  person cruisepandey    schedule 18.09.2018


Ответы (2)


В соответствии с вашими попытками кода вы не вызывали метод perform() для Mouse Hover. Вам нужно вызвать WebDriverWait для элементов, и вы можете использовать следующее решение:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
//other lines of code
Actions mouseHover = new Actions(driver);
mouseHover.moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOf(ParentElement)))).perform();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath(subElement))).click();

Обновлять

Поскольку вы все еще видите ошибку как:

 java.lang.NullPointerException at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:882) at org.openqa.selenium.interactions.Actions.<init>(Actions.java:68)

Это означает, что экземпляр WebDriver, то есть драйвер, недоступен из этой части кода. Проблема может быть связана с тем, что driver имеет значение null, поскольку вы не расширили класс Base в классе Test. Убедитесь, что драйвер доступен.

Связанные обсуждения:

person DebanjanB    schedule 18.09.2018
comment
Я пробовал оба варианта, но ничего не вышло. Вот stacktrace: java.lang.NullPointerException в com.google.common.base.Preconditions.checkNotNull (Preconditions.java:882) в org.openqa.selenium.interactions.Actions. ‹Init› (Actions.java:68) в HoverShemes.Order_CreateANewOrder.setHoverSearch (Order_CreateANewOrder.java:40) в testClasses.HomeTests.Hovers_Test.getHoverSearch (Hovers_Test.java:14) - person user9790882; 18.09.2018
comment
@ user9790882 Проверить мой ответ и сообщить статус - person DebanjanB; 18.09.2018
comment
Я расширил базовый класс в тестовом классе и получил ту же ошибку. Спасибо - person user9790882; 19.09.2018
comment
Теперь это работает. Я обнаружил, что у меня есть драйвер WebDriver; в моем тестовом классе и удалили это. Спасибо - person user9790882; 20.09.2018
comment
@ user9790882 Проголосуйте за ответ, если этот / любой ответ / был полезен для вас в интересах будущих читателей. - person DebanjanB; 20.09.2018

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

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.LOCATOR("subelement")));

Это будет выглядеть так,

Actions mouseHover = new Actions(driver);
mouseHover.moveToElement(ParentElement);

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.LOCATOR("subelement")));

mouseHover.moveToElement(subElement);
mouseHover.click(subElement);

Cheerz

person Muditha Perera    schedule 18.09.2018
comment
Мудита Перера, я попробовала ваш вариант, но все равно получаю ту же ошибку. - person user9790882; 20.09.2018