java - 带有自定义 ExpectedCondition 的 NullPointerException

标签 java selenium

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

相关文章:

java - dom4j - xpath - 获取 xml 作为 Document.valueOf 的字符串

java - 使用 LibGDX 顺时针旋转图像

java - 我正在尝试为标签打印机 QL-720NW 进行无线打印,但出现错误 NOT_MATCH_ADDRESS?

java - 不用jdk就可以登录java web start吗?

java - 如何使用 Chrome 驱动程序使用 Java 覆盖 selenium2 中的基本身份验证?

javascript - Selenium:尝试从 Perl 调整窗口大小:出现神秘的 JavaScript 错误

java - 如何使用 Selenium 从自动完成文本框中选择文本

java - Jersey Guice JSP如何?

python - 如何更改像按钮一样的跨度文本

javascript - 我可以使用 Python 和 Selenium 的正则表达式找到一个元素吗?