Ошибка при создании модуля PageObject в селене Для простого Tesng Testcase - PullRequest
0 голосов
/ 10 марта 2019

Я пытался создать простую программу в Selenium, используя PageObjectModel. Во время работы программы выдается исключение нулевого указателя. Не знаю, что я делаю неправильно. Моя инициализация переменной неверна. Я знаю, что ошибаюсь при инициализации локатора By, но не знаю, что я делаю неправильно.

    public class main extends Base{

    private static final int TIMEOUT = 5;
    private static final int POLLING = 100;

    protected WebDriverWait wait;
    protected static WebElement ele;
    protected By locator;

    public void Base() {
        wait = new WebDriverWait(driver, TIMEOUT, POLLING);
    }

    public WebElement waitForElementToAppear(By locator) {
        wait.until(ExpectedConditions.presenceOfElementLocated(locator));//Line which Throws Null
        return ele;
    }

    protected void waitForElementToDisappear(By locator) {
        wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));
    }

    protected void waitForTextToDisappear(By locator, String text) {
        wait.until(ExpectedConditions.not(ExpectedConditions.textToBe(locator, text)));
    }
@Test()
   public void getURL() {
            driver.get("https://www.google.com");
            waitForElementToAppear(By.name("q")).sendKeys("Pom");// Line Which Throws Null.

}

И мой код базового класса, в котором я сохранил свойства драйвера.

 public class Base {
    protected WebDriver driver;

    public WebDriver getDriver() {
        return driver;
    }

    public void setDriver(WebDriver driver) {
        this.driver = driver;
    }
    @BeforeSuite
    public void beforeSuite() {
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium\\chromedriver.exe"); // You can set this property elsewhere
        driver=new ChromeDriver();
        driver.manage().window().maximize();

    }
}

Ответы [ 2 ]

2 голосов
/ 10 марта 2019

Проблема заключается в том, как вы инициализируете объект WebDriverWait.

Ваш объект WebDriver будет создан только тогда, когда метод @BeforeSuite будет запущен в вашем классе Base.

Логика инициализации WebDriverWait является частью метода public void Base() в вашем main классе.

Но ваш @Test аннотированный getURL() метод не вызывает Base() метод.Таким образом, ваш wait объект всегда имеет значение null.

Чтобы это исправить, вызовите Base() в вашем методе @Test или закомментируйте ваш метод Base() аннотацией @BeforeClass, чтобы он автоматически вызывалсяпо TestNG.

0 голосов
/ 10 марта 2019

В вашем коде несколько проблем

  • Возможно, вам не нужны объявления глобальных переменных.Конечно, вы можете сделать это так, но убедитесь, что вы их инициализируете.
  • Не помещайте тестовые методы в объект вашей страницы
  • ele всегда будет нулевым
  • Вызовите конструктор

Возможно, вам нужно что-то вроде следующего:

 public class MyPageObject extends Base{

    private static final int TIMEOUT = 5;
    private static final int POLLING = 100;

    protected WebDriverWait wait;

    public void MyPageObject() {
        super();                                             //Call constructor of Base if needed
        wait = new WebDriverWait(driver, TIMEOUT, POLLING);  //init wait
    }

    public WebElement waitForElementToAppear(By locator) {
        wait.until(ExpectedConditions.presenceOfElementLocated(locator));
        return driver.findElement(locator);                  //return WebElement
    }

    protected void waitForElementToDisappear(By locator) {
        wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));
    }

    protected void waitForTextToDisappear(By locator, String text) {
        wait.until(ExpectedConditions.not(ExpectedConditions.textToBe(locator, text)));
    }
}

public class MyTestClass {
   @Test()
   public void getURL() {
       MyPageObject myPageObject = new MyPageObject();       //Initialize your page object
       driver.get("https://www.google.com");
       myPageObject.waitForElementToAppear(By.name("q")).sendKeys("Pom");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...