我创建了一个自定义 ExpectedCondition 用作 wait.until() 方法中的输入,但是当我的代码到达自定义 ExpectedCondition 参数时,会引发 NullPointerException,并且我无法弄清楚原因。我已经尝试了一切,但总是收到相同的结果。下面,您将找到我的代码
自定义等待:
public static ExpectedCondition<Boolean> visibilityOfElement(final
WebElement element) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver input) {
try {
return element.isDisplayed();
}catch(NoSuchElementException e) {
return false;
}catch(StaleElementReferenceException e1) {
return false;
}
}
};
}
}
LoginPage(此页面包含调用 CustomWait 类方法的代码):
public class LoginPage {
WebDriver driver;
WebDriverWait wait;
@FindBy(how=How.ID, using="email") WebElement email;
@FindBy(how=How.ID, using="password") WebElement password;
@FindBy(how=How.ID, using="submit-button") WebElement loginSubmitButton;
public LoginPage(WebDriver driver) {
this.driver = driver;
}
public void login(String email, String password) {
wait.until(CustomWait.visibilityOfElement(this.email));
this.email.sendKeys(email);
this.password.sendKeys(password);
loginSubmitButton.click();
}
}
当程序到达代码“wait.until(CustomWait.visibilityOfElement(this.email))”时,即抛出 NullPointerException 时,我相信我的visibilityOfElement 方法参数的“WebDriver 输入”部分Custom Wait 类的错误就是问题所在,但我不明白为什么。
主要(这是我的测试所在的位置):
public class Main {
WebDriver driver;
public Main() {
driver = BrowserFactory.startBrowser("chrome",
"http://123help123.com/");
}
@Test
public void smokeTest() {
HomePage homePage = PageFactory.initElements(driver,
HomePage.class);
homePage.clickLogin();
LoginPage loginPage = PageFactory.initElements(driver,
LoginPage.class);
loginPage.login("haha", "123");
}
}
BrowserFactory(这就是我的驱动程序的创建方式):
public class BrowserFactory {
static WebDriver driver;
public static WebDriver startBrowser(String browser, String url) {
if(browser.equalsIgnoreCase("firefox")) {
driver = new FirefoxDriver();
}
else if(browser.equalsIgnoreCase("chrome")) {
if(SystemUtils.IS_OS_MAC_OSX) {
System.setProperty("webdriver.chrome.driver",
"src/chromedriver");
}
else if(SystemUtils.IS_OS_WINDOWS) {
System.setProperty("webdriver.chrome.driver",
"src/chromedriver.exe");
}
driver = new ChromeDriver();
}
else if(browser.equalsIgnoreCase("ie")) {
driver = new InternetExplorerDriver();
}
driver.manage().window().maximize();
driver.get(url);
return driver;
}
}
非常感谢任何帮助,如果您需要更多信息,请告诉我。
最佳答案
您收到 NullPointerException 是因为您尚未在 LoginPage 类中初始化 wait。因此没有驱动程序可以传递给您的自定义 ExpectedCondition。
public LoginPage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver,5);
}
关于java - 带有自定义 ExpectedCondition 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910450/