java 获取URL时出现Selenium Web驱动程序空指针异常

myzjeezk  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(161)

我已经找到了这个问题的多个答案,但是没有一个能帮到我。当我运行我的测试时,我得到了一个NullPointerException。我想这是一个简单的修复,但是我找不到它。
下面是我设置的类:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.fail;

public class TestSetUp {

private WebDriver driver;

protected StringBuffer verificationErrors = new StringBuffer();

public WebDriver getDriver() {
    return driver;
}

private void setDriver(String type, String url) {

    switch (type) {
        case Config.FIREFOX_DRIVER:
            System.out.println("Setting drivers for Firefox...");
            driver = initFireFoxDriver(url);
            break;
        default:
            System.out.print("invalid browser type");
    }
}

private static WebDriver initFireFoxDriver(String url) {
    System.out.println("Launching Firefox browser...");
    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    driver.navigate().to(url);
    return driver;
}

@BeforeClass
@Parameters({"type","url"})
public void initializeTestBaseSetup(String type, String url) {
    try {
        setDriver(type, url);
    } catch (Exception e) {
        System.out.println("Error....." + Arrays.toString(e.getStackTrace()));
    }
}

@AfterClass
public void tearDown() {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
        fail(verificationErrorString);
    }
}
}

这是抛出错误的LoginPage类:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class LoginPage {

private WebDriver driver;

public LoginPage(WebDriver driver) {
    this.driver = driver;
}

private String getLoginTitle() {
    return driver.getTitle();
}

public boolean verifyURL() {

    return driver.getCurrentUrl().contains("login");
}

public boolean verifyLoginTitle() {
    return getLoginTitle().contains(Config.TITLE + " - Log In");
}

public boolean verifySignInError() {
    enterUsername("test");
    enterPassword("pass");
    clickLogin();
    return getErrorMessage().contains("Incorrect Username or Password");
}

public boolean verifyForgotPassword() {
    return driver.findElement(Config.FORGOT_PASS_NODE).isDisplayed();
}

public boolean verifyLicencing() {
    Config.changeSetting("multi_license", 1, driver);

    return driver.findElement(Config.LIC_KEY_NODE).isDisplayed();
}

public boolean verifyCreateAccount() {
    Config.changeSetting("user_reg", 0, driver);

    if(driver.findElement(Config.CREATE_ACCOUNT_NODE).isDisplayed()) {
        return false;
    }
    else {
        Config.changeSetting("user_reg", 1, driver);
    }

    return driver.findElement(Config.CREATE_ACCOUNT_NODE).isDisplayed();
}

public HomePage signIn(String username, String password) {
    enterUsername(username);
    enterPassword(password);
    clickLogin();

    return new HomePage(driver);
}

public void enterUsername(String username) {
    WebElement identity = driver.findElement(Config.IDENTITY_NODE);
    if(identity.isDisplayed())
        identity.sendKeys(username);
}

public void enterPassword(String password) {
    WebElement pass = driver.findElement(Config.CREDENTIAL_NODE);
    if(pass.isDisplayed())
        pass.sendKeys(password);
}

public void clickLogin() {
    WebElement loginBtn = driver.findElement(Config.SUBMIT_NODE);
    if(loginBtn.isDisplayed())
        loginBtn.click();
}

public String getErrorMessage() {
    String errorMessage = null;
    WebElement errorMsg = driver.findElement(Config.DANGER_NODE);
    if(errorMsg.isDisplayed())
        errorMessage = errorMsg.getText();
    return errorMessage;
}

}

最后是我的测试案例:

import org.junit.Assert;
import org.junit.Before;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;

public class LoginPageTest extends TestSetUp {

private WebDriver driver;

@Before
public void setUp() {
    driver = getDriver();
}

@Test
public void verifyLoginInFunction() {
    System.out.println("Log In functionality being tested...");

    LoginPage loginPage = new LoginPage(driver);

    try {
        Assert.assertTrue("The url is incorrect", loginPage.verifyURL());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }

    try {
        Assert.assertTrue("Title did not match", loginPage.verifyLoginTitle());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }

    try {
        Assert.assertTrue("Error message did not match", loginPage.verifySignInError());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }

    try {
        Assert.assertTrue("\'Forgot Password?\' link is missing", loginPage.verifyForgotPassword());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }

    try {
        Assert.assertTrue("Create Account setting not working", loginPage.verifyCreateAccount());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }

    try {
        Assert.assertTrue("Additional Licence Key setting not working", loginPage.verifyLicencing());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }

    HomePage homePage = loginPage.signIn(Config.STUDENT, Config.STUDENTPASS);

    try {
        Assert.assertTrue("Login did not work", homePage.verifyURL());
    } catch (Error e) {
        verificationErrors.append(e.toString());
    }
}
}

我一直在尝试,只是不知道是什么导致了这个问题。

rdlzhqv9

rdlzhqv91#

所以,我只是在处理这个同样的问题,并意识到这个问题是问了大约7年前。我想我会分享我想出的作为我的解决方案。
对于你试图访问的示例,你传递了一个空值。你给一个还没有初始化的东西赋值,这会给你带来你看到的异常:)一个空值到驱动程序loginPage是一个no no。首先初始化-〉然后传递值-〉满意的输出。
我在这里不是给予你一个编码的教训,因为你已经证明了你知道你在做什么,但快乐的编码!

相关问题