#java #cucumber #cucumber-java
Вопрос:
Я пытался закодировать параллельное выполнение файла функций cucumber, но на консоли была выведена такая ошибка:
[TestNG-PoolService-0] ERROR com.nicholas.StepsDef.ExportProduct - java.lang.NullPointerException
Element info: {Using=xpath, value=//a[@class='log-wrapper']/child::img}
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:428)
at org.openqa.selenium.By$ByXPath.findElement(By.java:353)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:205)
at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:201)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:249)
at com.nicholas.StepsDef.AddProduct.navigateToManageProduct(AddProduct.java:65)
at ✽.navigate to manage product(file:///C:/Users/nicholaswkc/IdeaProjects/cucumber-java-skeleton/src/test/resources/Features/AddProduct.feature:7)
05:38:22.730 [TestNG-PoolService-0] ERROR com.nicholas.StepsDef.ExportProduct - java.lang.NullPointerException
05:38:22.780 [TestNG-PoolService-0] ERROR com.nicholas.StepsDef.AddProduct - org.openqa.selenium.NoSuchSessionException: invalid session id
AddProductPageObject.java
public By lazadaLogo = By.xpath("//a[@class='log-wrapper']/child::img");
AddProduct.java
public class AddProduct {
private AddProductPageObject page;
private ChromeDriver driver;
private Logger log = LogManager.getLogger(AddProduct.class);
// ======================================================================
public AddProduct() {
}
@Given("Launch the homepage and login")
public void launchTheHomepageAndLogin() {
log.info("Start Login");
try {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
WebDriverWait timeWait = new WebDriverWait(driver, 30);
page = PageFactory.initElements(driver, AddProductPageObject.class);
driver.navigate().to("https://sellercenter.lazada.com.my/apps/seller/login");
timeWait.until(ExpectedConditions.visibilityOfElementLocated(page.getLazadaSellerLogo()));
// Input username
driver.findElement(page.getUsername()).click();
driver.findElement(page.getUsername()).clear();
driver.findElement(page.getUsername()).sendKeys("nicholaswkc34@gmail.com");
// Input password
driver.findElement(page.getPassword()).click();
driver.findElement(page.getPassword()).clear();
driver.findElement(page.getPassword()).sendKeys("wlx_ 279295");
// Click submit btn
driver.findElement(page.getSignInButton()).click();
//assertThat(page.getPageTitle()).isEqualto("");
Wait wait = new Wait();
wait.implicitWait(driver, 5);
} catch (Exception e) {
log.error(e);
}
}
@Given("navigate to manage product")
public void navigateToManageProduct() {
WebDriverWait waitProductLink = new WebDriverWait(driver, 30);
waitProductLink.until(ExpectedConditions.visibilityOfElementLocated(page.getLazadaLogo()));
driver.findElement(page.getProductLink()).click();
WebDriverWait waitManagedProductLink = new WebDriverWait(driver, 30);
waitManagedProductLink.until(ExpectedConditions.visibilityOfElementLocated(page.getManageProductLink()));
driver.findElement(page.getManageProductLink()).click();
}
Более того, когда я запускаю команду mvn, она выскакивает org.testng.xml.XmlSuite.setParallel(Ljava/lang/String;)
, которая выделена в этой группе
Вопросы:
- В чем причина ошибки?
- Когда должна быть исправлена ошибка плагина maven surefire?
Комментарии:
1. Почему голосование закрыто? Это настоящая ошибка, с которой я сталкиваюсь.
2. Мне действительно нужна помощь. Пожалуйста, помогите мне с этой программной ошибкой.
3. ваш вывод также показывает «org.openqa.selenium. Исключение NoSuchSessionException: недопустимый идентификатор сеанса». Это может быть признаком того, что версия драйвера Chrome несовместима с версией вашего браузера Chrome. Следующая ссылка может помочь проверить совместимость: sites.google.com/a/chromium.org/chromedriver/downloads/…
Ответ №1:
Я видел, как произошла ошибка в «на com.nicholas.StepsDef.addProduct.navigateToManageProduct(addProduct.java:65)», метод — страница.getLazadaLogo().
Я предполагаю, что объект драйвера содержит значение null при создании WebDriverWait waitProductLink = new WebDriverWait(driver, 30);
объекта. Как правило, WebDriverWait принимает значение null в своем параметре конструктора, но выдает ошибку во время выполнения, когда мы пытались использовать этот объект ожидания, созданный с использованием значения null.
Решения:
- Проверьте, что содержит драйвер на шаге «переход к управлению реализацией продукта». Область назначения драйвера «Запуск домашней страницы и вход в систему», специфичная для этого конкретного блока. Чтобы преодолеть эту проблему, сделайте переменную драйвера статической и назначьте ей ссылку на объект драйвера на шаге- «Запустите домашнюю страницу и войдите в систему».
- В случае, если эти два шага выполняются параллельно, вам также необходимо создать объект драйвера внутри реализации шага «переход к управлению продуктом».
Комментарии:
1. Именно эта строка кода вызывает ошибку waitProductLink.until(Ожидаемые условия.visibilityOfElementLocated(страница.getLazadaLogo ()));. Я отладил его, но драйвер не равен нулю. Как получилось, что это утверждение не вызвало такого понимания. Я также объявил ChromeDriver статичным.
2. Все мои другие методы выбрасывают исключение NoSuchSessionException. Почему это так. Я должен был объявить драйвер частным в области класса? Сеанс драйвера должен быть доступен для любых методов в классе. Зачем нужно создавать другой объект драйвера в другом методе класса?
3. Я попытался добавить еще один драйвер1 в navigatetToManageProduct, но это все равно не удалось. Пожалуйста, помогите мне. Спасибо.
4. Я обнаружил, что это ожидаемое условие ожидания, которое вызывает исключение, а не драйвер, равно нулю.
5. Это здорово @Николас
Ответ №2:
Решите эту проблему, переместив инициализированный код в метод @Before.