#selenium #selenium-webdriver #junit #selenium-chromedriver #junit4
#селен #selenium-webdriver #junit #selenium-chromedriver #junit4
Вопрос:
Я пытался провести тестирование автоматизации Selenium в https://www.yatra.com/etw-desktop / . Моей целью было нажать кнопку с изображением с именем «Азия», которая перенаправит на другую страницу (прилагаемые изображения). Я скопировал полный XPath и попытался, но я получаю исключение NullPointerException. Пожалуйста, дайте несколько предложений, так как я не нашел ничего плохого в своем коде.
package com.stackroute.SeleniumProject;
import java.util.concurrent.TimeUnit;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;
/**
* JUnit project.
*/
public class Yatra {
public static WebDriver driver = null;
@FindBy(xpath = "/html/body/my-app//app-drawer-layout/app-header-layout/iron-pages/my-home//div/div/div/div/paper-material[2]/div[1]/div/a[2]/div[4]")
WebElement Asia;
@BeforeClass
public static void setup() {
String chromePath = System.getProperty("user.dir") "/lib/chromedriver.exe";// directory of chrome driver
System.setProperty("webdriver.chrome.driver", chromePath);
driver = new ChromeDriver();
}
@AfterClass
public static void close() throws InterruptedException {
driver.close();
}
@Test
public void test1() throws InterruptedException {
driver.manage().window().maximize();
driver.get("https://www.yatra.com/etw-desktop/");
driver.manage().timeouts().implicitlyWait(4000, TimeUnit.MILLISECONDS);
Thread.sleep(5000);
// the error is in the below line Asia.click()
Asia.click();
driver.manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS);
Thread.sleep(2000);
Assert.assertEquals("page not found", "https://www.yatra.com/etw-desktop/city-list", driver.getCurrentUrl());
}
}
Изображение, показывающее элемент, на который нужно щелкнуть
Ответ №1:
Вы используете PageFactory(из объектной модели страницы), поэтому вам нужно будет инициализировать() webelements.
Для этого вам нужно будет импортировать
org.openqa.selenium.support.PageFactory;
Перед началом теста вам нужно будет инициализировать элементы:
PageFactory.initElements(driver, this) // where you pass the driver and this class to know which webelements to start.
Вы можете взглянуть здесь, чтобы понять подход и другое РУКОВОДСТВО по POM framework, более понятное для понимания
Комментарии:
1. я не хотел использовать PageFactory. Итак, я удалил @findBy и добавил
driver.findElement(By.xpath(.....)).click();
в тест вместоAsia.click();
, и я не получаю такого исключения элемента. Есть ли какие-либо ограничения для click(), когда div задействован в html XPath?2. находится ли ваш webelement внутри iframe?
3. Нет. Я проверил консоль. Я пробовал ожидать и ожидать ожидания. По-прежнему не нажимается кнопка изображения «Азия» (показана на прикрепленном изображении моего вопроса).
new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable (By.xpath("//*[@id="scrollable1"]/div[1]/div/a[2]/div[4]"))).click();
4. один вопрос, если вы посмотрите на этот локатор в консоли браузера, сможете ли вы найти его и увидеть, что он выделен?
5. Он выделен. Подразделения находятся под #shadow-root(открыты). Я не знаю, проблема ли это, поскольку я вижу это впервые.