胡萝卜J

导航

 

问题记录:

在学习selenium使用Page-Object模式时遇到一个问题:

开始:

因为在Page页面定义了一个登陆的方法,在登录的方法里需要加载驱动并且初始化chromeDriver

使用@FindBy定位的元素运行时一直报空指针的异常,百度了好长时间,基本都是统一的回答,需要在Page类里初始化页面元素

即:

public Page() {
        
        PageFactory.initElements(driver, this);

}

最开始就是初始化了的,所以这个回答并没有作用

修改后:

后来查看了许多答案和代码示例,发现需要在构造函数里把driver也要一起初始化才行,在登录的方法里不用再去初始化驱动和driver

public Page() {
        
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Administrator\\Desktop\\weather\\a\\chromedriver.exe");
        
        driver = new ChromeDriver();
        
        PageFactory.initElements(driver, this);
    }

这样运行的时候就不会报错了

 

 

 

接上面的记录,修改一下:

其实浏览器的驱动不用放到Page里,放到测试用例里或者单独创建一个基础页也可以,修改如下:

在Page页的构造函数里传递一个参数webdriver

在测试用例里再去创建谷歌浏览器的驱动,打开网址之类的:

public Page(WebDriver driver) {
        
        PageFactory.initElements(driver, this);

    }
//测试类
public class TestCase(){

     @Test
     public void test(){
     
            System.setProperty("webdriver.chrome.driver", "C:\\Users\\Administrator\\Desktop\\weather\\a\\chromedriver.exe");
        
            WebDriver chromeDriver = new ChromeDriver();
        
            chromeDriver.manage().window().maximize();
        
            chromeDriver.get("http://xxxxxxxxxxxx/login");

            //Page类实例化
            Page page = new Page(chromeDriver);
page.page里的方法 }

 

posted on 2022-09-08 17:14  胡萝卜J  阅读(75)  评论(0编辑  收藏  举报