java - 在 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();
}
}
解决方案
问题在于您初始化WebDriverWait
对象的方式。
只有当@BeforeSuite
方法在您的Base
类中运行时,您的 WebDriver 对象才会被实例化。
初始化的逻辑WebDriverWait
是类中方法public void Base()
的一部分main
。
但是您的@Test
注释getURL()
方法不会调用Base()
方法。所以你的wait
对象总是空的。
要解决此问题,Base()
请在您的@Test
方法中调用或使用注释对您的Base()
方法进行@BeforeClass
注释,以便 TestNG 自动调用它。
推荐阅读
- c# - 使用 .Net Core 获取 linux 容器内存和 CPU
- python - 预期输出未排序
- android - 颤振:输入“未来”
' 不是类型转换中类型 'bool' 的子类型 - flutter - 为什么不能在 Dart 的构造函数体中初始化不可为空的字段?
- phpmyadmin - 将表格数据从一个 joomla 站点传输到另一个
- parceljs - parceljs 波旁变压器-sass 无法构建
- arduino - 10 秒后 Arduino MP3 暂停
- c# - 能够使用 ngrok 但不能使用 Azure url 创建 Microsoft Graph 订阅
- amazon-web-services - 尝试创建 Fargate 配置文件时不断出错
- android - 将通知设置为在某个用户事件时触发