Как навести курсор мыши на родительский элемент и затем нажать на дочерний элемент, используя классы Selenium и Action - PullRequest
0 голосов
/ 18 сентября 2018

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

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

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Согласно вашим попыткам кода вы не вызывали метод 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 , т. Е. Драйвер , недоступен из этой части кода. Возможно, проблема связана с драйвером , который равен null , поскольку вы не расширили класс Base в классе Test . Убедитесь, что драйвер доступен.

Похожие обсуждения:

0 голосов
/ 18 сентября 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

...