问题记录:
在学习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里的方法 }