【发布时间】:2019-02-25 14:43:37
【问题描述】:
对于我的自动化脚本,使用页面对象模型用 Selenium 用 Java 编写,我有时想使用 Javascript 执行器,因为默认的 WebDriver 点击有时会导致找不到元素的异常。
在初始化 Web 元素的框架页面中,代码如下所示:
public class MainPage {
WebDriver driver;
JavascriptExecutor executor = (JavascriptExecutor) driver;
@FindBy(xpath = "//*[@id='main_button']/div/span")
WebElement mainButton;
@FindBy(xpath = "//*[@id='login_button']/div/span")
WebElement loginButton;
// constructor, where the elements are initialized
public MainPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
//method, for clicking mainButton with WebDriver
public void clickMainButton() {
WebDriverWait wait = new WebDriverWait(driver, 40);
wait.until(ExpectedConditions.elementToBeClickable(mainButton)).click();
}
//method, for clicking mainButton with JS Executor
public void clickLoginButton() {
WebDriverWait wait = new WebDriverWait(driver, 40);
executor.executeScript("arguments[0].click();", loginButton);
}
此时,在执行与页面交互的脚本时,当调用clickMainButton();方法,它被正确执行。但是当调用 clickLoginButton();方法,程序会抛出空指针异常:
java.lang.NullPointerException
at pages.MainPage.clickLoginButton(MainPage.java:55)
如果我在 clickLoginButton(); 中创建 Javascript 执行器的实例;方法,它可以正常工作。 我的问题是如何使用页面对象模型正确实现 Javascript 执行器,而不必在每个方法中创建它的新实例?
【问题讨论】:
标签: javascript java selenium automation