首页 > 解决方案 > 在 selenium 中为简单的 Tesng 测试用例创建 PageObject 模块时出错

问题描述

我尝试使用 PageObjectModel 在 Selenium 中创建一个简单的程序。运行程序时抛出空指针异常。不知道我在做什么错。是我的变量初始化是错误的。我知道我在初始化 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();

    }
}

标签: javaseleniumselenium-webdriverautomated-teststestng

解决方案


问题在于您初始化WebDriverWait对象的方式。

只有当@BeforeSuite方法在您的Base类中运行时,您的 WebDriver 对象才会被实例化。

初始化的逻辑WebDriverWait是类中方法public void Base()的一部分main

但是您的@Test注释getURL()方法不会调用Base()方法。所以你的wait对象总是空的。

要解决此问题,Base()请在您的@Test方法中调用或使用注释对您的Base()方法进行@BeforeClass注释,以便 TestNG 自动调用它。


推荐阅读