当前位置: 首页 > 知识库问答 >
问题:

通过Selenium使用PageFactory和Page对象调用SendKeys时出现NullpointerException

孔瑾瑜
2023-03-14

我有三个类。一个用于从网页中获取所有元素,一个用于使用这些元素执行操作,一个用于测试脚本。当我从测试脚本调用函数时,我得到一个空指针异常。我发现这是因为我使用了@FindBy注释,但我不知道如何解决这个问题。

元素类别:

public class LoginPageElements {

    @FindBy(id="loginId")
    private static WebElement userNameTextBox;

    @FindBy(id="password")
    private static WebElement userPasswordTextBox;

    @FindBy(id="QTP_LoginButton")
    private static WebElement loginButton;

    public static WebElement getUserNameTextBox(WebDriver driver){
        WebElement a=driver.findElement(By.id("loginId"));
        return a;
    }

    public static WebElement getUserPasswordTextBox(){
        return userPasswordTextBox;
    }

    public static WebElement getLoginButton(){
        return loginButton;
    }
}

操作类:

public class LoginPageActions {

        public static void login(WebDriver driver,String username,String password){
            WebElement a=LoginPageElements.getUserNameTextBox(driver);
            a.sendKeys(username);
            LoginPageElements.getUserPasswordTextBox().sendKeys(password);
            LoginPageElements.getLoginButton().click();
        }

    }

测试脚本:

public class Sample {
     public static String driverPath = "D:/Selenium/Chrome Driver latest/chromedriver.exe";
     public static WebDriver driver;
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", driverPath);

    ChromeOptions options = new ChromeOptions();
    options.addArguments("test-type");
    options.addArguments("start-maximized");
    options.addArguments("--js-flags=--expose-gc");
    options.addArguments("--enable-precise-memory-info");
    options.addArguments("--disable-popup-blocking");
    options.addArguments("--disable-default-apps");
    options.addArguments("--enable-automation");
    options.addArguments("test-type=browser");
    options.addArguments("disable-infobars");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);

    driver = new ChromeDriver(options);

    driver.get("http://10.235.80.106:8080");

    LoginPageActions.login(driver,"acb", "adasd");
}

当我将WebDriver对象从测试脚本传递到element类时,没有例外。由于没有WebDriver实例化,所以在使用用FindBy注释初始化的元素时会出现问题。如何修复此问题?谢谢

共有2个答案

逄皓轩
2023-03-14

您需要声明WebDriver实例,并在LoginPageElements中添加构造函数

>

  • LoginPageElements类:

    WebDriver driver;
    
    //constructor
    public LoginPageElements(WebDriver loginDriver)
    {
        this.driver=loginDriver;
    }
    

    登录页面操作(LoginPageActions)类:

    WebDriver driver;
    
    //constructor
    public LoginPageActions(WebDriver loginDriver)
    {
        this.driver=loginDriver;
    }
    

    如果这回答了你的问题,请告诉我。

  • 赫连秦迟
    2023-03-14

    您可以继续使用@FindBy注释,只需确保初始化WebElements即可。为此,您应该使用PageFactory初始化登录页面元素:

    LoginPageElements loginPageElements = PageFactory.initElements(webDriver, LoginPageElements.class);
    

    其中webDriver是您用于运行硒测试的WebDriver的实例。

     类似资料:
    • 问题内容: 我有三节课。一种用于从网页中获取所有元素,一种用于对这些元素执行操作,另一种用于测试脚本。从测试脚本调用函数时,出现空指针异常。我发现这是因为我使用了@FindBy批注,但我不知道如何解决此问题。 元素类: 动作类: 测试脚本: 当我将WebDriver对象从测试脚本传递到元素类时,也不例外。由于没有WebDriver实例化,当我使用通过FindBy注释初始化的元素时,会发生问题。我该

    • 在尝试通过扩展抽象类和测试类来创建测试时,我得到了NullPointerException。错误: java.lang.NullPoInterException(位于pages.userRegistrationPage.java:61)(位于userRegistrationPage.java:61)(位于sun.reflect.nativeMethodAccessorImpl.Invoke0(原生

    • 我知道我们可以通过[FindsBy]属性覆盖属性并使用PageFactory初始化所有元素来清理页面对象。我们这样定义这些属性: 我们可以通过调用来初始化所有此类属性: 我想到的第一个问题是搜索过程将如何运行?重试多少次,是否应用了超时?我假设只有一次尝试,没有超时。 是否可以将PageFactory方法与自定义搜索过程相结合,例如在设置ExpectedCondition的情况下进行3次搜索尝试等

    • 问题内容: 有没有办法使用PageFactory批注来等待Selenium中不存在的元素? 使用时: 找到元素,然后: 我会得到: 我可以使用以下方法执行我需要做的事情: 但是,我希望能够使用PageFactory批注以使框架保持一致。有没有办法做到这一点? 问题答案: 期望定位器,但是您正在发送网络元素,这就是为什么它会引发错误。您可以通过使用以下方法检查webelement列表来执行操作: 更

    • 问题内容: 我已导入以下内容,但在使用时仍然出现错误 注意:我在Eclipse中使用Selenium WebDriver。 示例代码如下。 我收到一条错误消息,指出 指向线 你们其中一个能让我知道这里有什么不对吗? 问题答案: 您可以尝试使用此方法,这里已解决了类似的问题#sendKeys问题 或简单地

    • 我正在尝试按id搜索对象,但出现以下错误:CastError:Cast to ObjectId在路径“\u id”处的值“[object object]”失败 这是我的代码: console.log(org_id.organisation_id); 给我:5661639AFF20A5CC806D476