0

我正在自动化https://www.zoho.com/login.html。此页面在框架内有登录部分。当我切换不同的框架并搜索我的电子邮件/电话字段(登录部分)时,我可以找到它,然后使用工作块(下面)但不能使用类似的代码(也在下面)两个块之间的唯一区别是我如何识别我的 userNameInputBox 元素。

//这是工作

       List<WebElement> iframeElements =   driver.findElements(By.tagName("iframe"));
                int nFrames = iframeElements.size();

        //Switching frame to go to login frame  
        for (int i=0; i<=nFrames ; i++) {
            System.out.println("nFrames: " +nFrames);
            driver.switchTo().frame(i);
            if (driver.findElement(By.name("lid")).isDisplayed()){


                driver.findElement(By.name("lid")).sendKeys("myuserName1");
}}

但是,如果我使用它(下面的代码)它不起作用,而是在我将我的用户名输入到用户名字段的行中给我 NullPointerException。

///这不起作用

//Elements

    @FindBy(name="lid")
    WebElement userNameInput;

//Switching frame to go to login frame  
        for (int i=0; i<=nFrames ; i++) {
            System.out.println("nFrames: " +nFrames);
            driver.switchTo().frame(i);
            if (driver.findElement(By.name("lid")).isDisplayed()){
                userNameInput.click(); //clicking the inputBox
                userNameInput.sendKeys("myuserName"); //Sendingkeys into
}}

有人可以解释这种异常的原因是什么吗?或者指出我错过了什么?我想为 WebElement 使用 @FindBy。

4

1 回答 1

1

@FindBy标记旨在与页面对象模型一起使用。要使用它,您必须使用 PageFactory 初始化页面对象,以便这些字段被初始化,然后被 webdriver “找到”。

有关它的文档,请参阅https://github.com/SeleniumHQ/selenium/wiki/PageFactory

因此,在您尝试使用该userNameInput字段之前,您必须有一些类似的行

PageFactory.initElements(driver, page); (其中pagevar 是使用@FindBy注解的类。

于 2017-04-28T18:44:27.150 回答