gpt4 book ai didi

java - 带有自定义 ExpectedCondition 的 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 02:57:05 25 4
gpt4 key购买 nike

我创建了一个自定义 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/

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