2

我是 Selenium 学习的新手。null pointer exception当我尝试使用 web 元素时,我得到了-Milestone_Tile_Text.click; 在我的代码中,但是当我使用它时它工作正常

LoginTestScript.fd.findElement(By.linkText("Milestone")).click();

请参阅下面我也使用PageFactory.initElements过的代码,但不确定如何解决此错误。

public class MilestoneTileModel 
{

    GenerateTestData objtestdata = new GenerateTestData() ;

        public  MilestoneTileModel() //constructor
            {
                PageFactory.initElements(LoginTestScript.fd, this);
            }

        @FindBy(xpath="//a[text()='Milestone']")
        WebElement Milestone_Tile_Text;

public void Milestone_Tile_Click()
            {
                Milestone_Tile_Text.click();
                LoginTestScript.fd.findElement(By.linkText("Milestone")).click();
LoginTestScript.fd.findElement(By.xpath("//*@id='CPH_btnAddNewMilestoneTop']")).click();
            }
}
4

2 回答 2

0

当您使用 init 方法时,计时问题可能会更频繁地发生。

时间问题是当您初始化一个元素时,驱动程序会立即尝试查找元素,失败时您将不会收到任何警告,但元素将引用 null。

例如,由于页面未完全呈现或驱动程序看到页面的旧版本,可能会发生上述情况。

修复可以将元素定义为属性,并在get属性上使用驱动程序从页面获取元素

请注意,selenium 不保证驱动程序会看到页面的最新版本,因此即使这样也可能会中断,并且在某些情况下重试会起作用。

于 2017-02-04T21:21:25.510 回答
0

我看到的第一个问题:你没有设置LoginTestScript

首先,您需要按照文档设置 PageObject 变量: GoogleSearchPage page = PageFactory.initElements(driver, GoogleSearchPage.class);

丰富这一点的最佳方法是单独的页面对象模型和场景脚本

您的第一个文件 POM 应包含:

登录TestPOM

 public class LoginTestPOM {
     @FindBy(xpath="//a[text()='Milestone']")
     WebElement MilestoneTileText;

     public void clickMilestoneTitleText(){
            MilestoneTitleText.click();
     }
}

测试脚本

import LoginTestPOM
public class TestLogin {
    public static void main(String[] args) {
        // Create a new instance of a driver
        WebDriver driver = new HtmlUnitDriver();

        // Navigate to the right place
        driver.get("http://www.loginPage.com/");

        // Create a new instance of the login page class
        // and initialise any WebElement fields in it.
        LoginTestPOM page = PageFactory.initElements(driver, LoginTestPOM.class);

        // And now do the page action.
        page.clickMilestoneTitleText();
    }
}  

这是页面对象模式的基础。

注意:我只在浏览器中编写该代码,因此它可能包含一些错误。

链接:https ://github.com/SeleniumHQ/selenium/wiki/PageFactory

没有页面对象模式的“丑陋”解决方案是:

丑陋的测试脚本

public class UglyTestLogin {
    public static void main(String[] args) {
        // Create a new instance of a driver
        WebDriver driver = new HtmlUnitDriver();

        // Navigate to the right place
        driver.get("http://www.loginPage.com/");

        // DON'T create a new instance of the login page class
        // and DON'T initialise any WebElement fields in it.
        // And do the page action.
        driver.findElement(By.xpath("//a[text()='Milestone']").click()
        }
}  
于 2017-02-05T14:01:29.043 回答