原因
最近学习selenium,就打算自己写写,写的过程中发现一个问题,UI自动化页面大部分需要先登录才能进行后续操作。
考虑到如果将所有的功能都写到一个类里面,代码过长,而且不容易维护;其次按照功能分块来写,每次都需要写登录那块代码,这样代码就冗余了;然后就选择了将登录作为父类,其他类直接继承父类就可以了。
然后问题就来了,因为父类中的driver和子类中的driver不是一个,所以在子类中执行完登录后,子类中的driver会重新打开一个窗口。
解决方法
开始百度了很多,一直没有用,还是不能实现。后面是在父类中将driver定义为一个常量,写一个返回driver的方法
public static final WebDriver driver = getDriver();
public static WebDriver getDriver(){
File file = new File("C://driver/chromedriver.exe");
System.setProperty("webdriver.chrome.driver",file.getAbsolutePath());
WebDriver drivers = new ChromeDriver();
return drivers;
}
需要使用driver时,直接LoginPhone.driver。
下面给出部分代码
public class LoginPhone {
public static final WebDriver driver = getDriver();
public static WebDriver getDriver(){
File file = new File("C://driver/chromedriver.exe");
System.setProperty("webdriver.chrome.driver",file.getAbsolutePath());
WebDriver drivers = new ChromeDriver();
return drivers;
}
public static void LoginPhone(){
WebDriver driver=LoginPhone.driver;
driver.manage().window().maximize();
driver.get("http://www.baidu.com/");
}
}
子类
public class PlatformFunction extends LoginPhone {
public static void main(String[] args){
LoginPhone();
LoginPhone.driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/ul/li[1]/a")).click();
}
}