java - 我收到此消息但失败:org.openqa.selenium.support.pagefactory.DefaultElementLocator.find 处的 java.lang.NullPointerException
问题描述
我第一次使用 selenium 创建页面对象模型,在执行下面给出的代码时遇到了以下错误。需要帮助找出我错过了什么......
java.lang.NullPointerException at org.openqa.selenium.support.pagefactory.DefaultElementLocator.find
我的参考代码:
package Pages;
import org.openqa.selenium.*;
public class BaseClass {
public static WebDriver driver;
public static String URL1 = "https://math-dad.com";
public void setupWebDriver(String drivername)
{
if (drivername.equalsIgnoreCase("Chrome"))
{
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-notifications");
System.setProperty("webdriver.chrome.driver", "C:\\Drivers\\chromedriver.exe");
driver =new ChromeDriver(options);
}
else if (drivername.equalsIgnoreCase("Fire Fox"))
{
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--disable-notifications");
System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
driver =new FirefoxDriver(options);
}
}
public BaseClass()
{
System.out.println("Base Class Initiate");
}
}
package Pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class HeaderPage extends BaseClass{
@CacheLookup
@FindBy(xpath = "//div[@class='navbar-header']")
public static WebElement LOGO;
public displayHeader()
{
System.out.println(driver.findElement(By.xpath("//div[@class='navbar-header']")).getText());
}
public HeaderPage()
{
PageFactory.initElements(driver,this);
}
}
public class testHeaderPage extends HeaderPage{
@BeforeTest
public void beforeTest()
{
System.out.println("Before Test");
setupWebDriver("Chrome");
driver.get(URL1);
driver.manage().window().maximize();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
}
@Test
public void test1HeaderLOGO()
{
displayHeader(); // this is succesful
String Actual = LOGO.getText(); // Fails from this statement
System.out.println("Header LOGO: "+Actual);
String expected = "Math Dad";
Assert.assertEquals(Actual, expected, "Invalid Header");
}
@AfterTest
public void afterTest() {
drive.close();
}
}
在 HeaderPage 类中,我可以直接使用“驱动程序”,但页面工厂元素的声明失败。请问有什么帮助吗?
解决方案
在此方法中使用@BeforeClass
注释,以便可以初始化测试驱动程序之前。然后,此方法将在每次测试之前执行。
@BeforeClass
public void setupWebDriver(String drivername) {
if (drivername.equalsIgnoreCase("Chrome"))
{
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-notifications");
System.setProperty("webdriver.chrome.driver", "C:\\Drivers\\chromedriver.exe");
driver =new ChromeDriver(options);
}
else if (drivername.equalsIgnoreCase("Fire Fox"))
{
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--disable-notifications");
System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
driver =new FirefoxDriver(options);
}
}
推荐阅读
- kotlin - foreach kotlin 等待时间间隔跟随流程
- reporting-services - SSRS 2019 的自定义安全示例
- javascript - React JS 上的 Firebase Firestore 双循环数据
- javascript - 使用 behaviorsubject 跨侧组件通信更新计数项目
- wagtail - Wagtail - 如何在管理表单中将两个字段放在一行中?
- spring-boot - Eureka 服务器集群出错(对等感知)
- c# - JsonSerializer.Serialize 返回空对象
- python - 如何在 groupby() 之后使用 apply 在 lambda 函数中的两个条件下创建数据框?
- arrays - SwiftUI - 检查数组中是否存在值
- java - 如何使用 RestTemplate 将上游错误响应传递给下游服务