gpt4 book ai didi

java - selenium cucumber JUnit 框架中的空指针异常

转载 作者:行者123 更新时间:2023-11-30 05:36:51 25 4
gpt4 key购买 nike

有人可以告诉我代码中的空指针异常问题吗?

控制台中的错误消息

  =>test.pages.HomePage@31e75d13<=

[31mFailed scenarios:[0m
[31mE2E_Test.feature:3 [0m# Scenario: Test scenario

1 Scenarios ([31m1 failed[0m)
10 Steps ([31m1 failed[0m, [36m8 skipped[0m, [32m1 passed[0m)
0m12.461s

java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy17.sendKeys(Unknown Source)
at test.pages.HomePage.enterSearchText(HomePage.java:31)
at stepDefinitions.Steps.he_search_for(Steps.java:49)
at ✽.When he search for "test"(E2E_Test.feature:5)

虽然我正在获取驱动程序对象,并且它也不是 Null,但仍然遇到 空指针异常

我正在尝试运行selenium webdriver代码来自动化一些测试用例。在这里,我尝试打开 google.com 并希望在搜索框中输入一些文本,但打开 google.com 后,当执行到达 searchtextbox.sendkeys("test"),它给出了空指针异常。我尝试调试它以查看主页类对象是否为 null,但它显示的是值而不是 null。

这是我用来启动 Google 网站并最大化代码的测试基类

public class TestBase {

public static WebDriver driver;
public static Properties prop;
public static EventFiringWebDriver e_driver;
public static WebEventListener eventListener;

public TestBase() {
try {
prop = new Properties();

FileInputStream ip = new FileInputStream(System.getProperty("user.dir") + "/src/main/java/test" +
"/config/config.properties");
prop.load(ip);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

// This method is used to initiatize the site url

public static void initialization(String url) {
String browserName = prop.getProperty("browser");

if (browserName.equals("chrome")) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\test\\Downloads\\driver\\chromedriver.exe");
driver = new ChromeDriver();
}



e_driver = new EventFiringWebDriver(driver);
// Now create object of EventListerHandler to register it with EventFiringWebDriver
eventListener = new WebEventListener();
e_driver.register(eventListener);
driver = e_driver;

driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);
if (url == "google") {
driver.get(prop.getProperty("url"));
}

}
}

// Steps Definition file (Steps.java): This is the step defintion file // there is a function he_search_for called where the exception occurs

public class Steps extends TestBase {

WebDriver driver;
TestUtil testUtil;

HomePage homePage;

@Given("^user is on google home page$")
public void user_is_on_google_home_page() throws Throwable {
initialization("google");
testUtil = new TestUtil();
homePage = new HomePage(driver);
}

@When("^he search for \"([^\"]*)\"$")
public void he_search_for(String arg1) throws InterruptedException {
System.out.print("=>" + homePage + "<=");
homePage.enterSearchText();
}
}

// HomePage Class is used to define all the page elements here in this class, i used enterSearchText function to enter the text in a search box.

public class HomePage extends TestBase {

@FindBy(name = "q")
WebElement searchTextBox;


WebDriver driver;

// Initializing the Page Objects:
public HomePage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}

public void enterSearchText() {
searchTextBox.sendKeys("Test");
}
}

最佳答案

问题出在类步骤和测试库之间的代码设计模式中。请注意

首先,Steps正在扩展TestBase,其中已经声明并初始化了WebDriver变量。因此您不需要在步骤中再次定义WebDriver实例。所以请删除“WebDriver 驱动程序;”从下面的代码和平。

public class Steps extends TestBase {

WebDriver driver;
TestUtil testUtil;

第二,请不要将WebDriver声明为静态变量。请将其声明为非静态,因为保持静态也可能在并行执行期间产生问题。

public class TestBase {

public WebDriver driver;

将 WebDriver 实例设为非静态并使其线程安全

TestBase.java

public class TestBase {

public WebDriver driver;
public static Properties prop;

// This method is used to initiatize the site url
public synchronized void initialization(String url) {
String browserName = prop.getProperty("browser");
if (browserName.equals("chrome")) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\test\\Downloads\\driver\\chromedriver.exe");
driver = new ChromeDriver();
DriverManager.setWebDriver(driver);
}
}
}

DriverManager.java

import org.openqa.selenium.WebDriver;
public class DriverManager {

public static ThreadLocal<WebDriver> dr = new ThreadLocal<WebDriver>();

public static WebDriver getDriver() {
return dr.get();
}

public static void setWebDriver(WebDriver driver) {
dr.set(driver);
}
}

关于java - selenium cucumber JUnit 框架中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com