修改设计图,添加driver对象,并添加一个Page类以及完善AbstractBrower类相关切换页面的方法
This commit is contained in:
parent
8f8cb3f5cc
commit
da84e2e9e4
Binary file not shown.
|
@ -1,6 +1,7 @@
|
|||
package pres.auxiliary.work.selenium.browers;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -8,10 +9,9 @@ import java.util.concurrent.TimeUnit;
|
|||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import pres.auxiliary.selenium.browers.PageNotFoundException;
|
||||
|
||||
/**
|
||||
* 该类定义启动浏览器时必要的方法以及打开浏览器,创建WebDriver对象的操作,由新添加的各个浏览器子类可进行继承
|
||||
*
|
||||
|
@ -20,26 +20,10 @@ import pres.auxiliary.selenium.browers.PageNotFoundException;
|
|||
*
|
||||
*/
|
||||
public abstract class AbstractBrower {
|
||||
/**
|
||||
* 用于接收用户需要进入的网站
|
||||
*/
|
||||
String url = "";
|
||||
/**
|
||||
* 用于接收浏览器启动所需的文件路径
|
||||
*/
|
||||
File driverFile;
|
||||
/**
|
||||
* 存储页面加载等待时间
|
||||
*/
|
||||
int loadTime = 120;
|
||||
/**
|
||||
* 用于存储目标站点的title
|
||||
*/
|
||||
String assertTitle = "";
|
||||
/**
|
||||
* 用于存储页面自动刷新的次数,默认为0次
|
||||
*/
|
||||
int rafreshCount = 0;
|
||||
/**
|
||||
* 用于存储获取到的浏览器对象
|
||||
*/
|
||||
|
@ -47,85 +31,147 @@ public abstract class AbstractBrower {
|
|||
/**
|
||||
* 存储浏览器的设置内容,key表示浏览器设置的属性;value表示设置的内容
|
||||
*/
|
||||
HashMap<String, BrowerSetField> browerSetMap = new HashMap<String, BrowerSetField>();
|
||||
HashMap<String, String> browerSetMap = new HashMap<String, String>();
|
||||
/**
|
||||
* 存储打开的页面
|
||||
*/
|
||||
ArrayList<Page> pageList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 构造浏览器对象,并指定驱动文件及待测站点
|
||||
* 用于存储WebDriver当前指向的页面信息
|
||||
*/
|
||||
Page nowPage;
|
||||
|
||||
/**
|
||||
* 用于存储浏览器启动时的信息
|
||||
*/
|
||||
JSONObject informationJson = new JSONObject();
|
||||
|
||||
/**
|
||||
* 指定驱动文件所在路径
|
||||
*
|
||||
* @param driberFile 驱动文件对象
|
||||
*/
|
||||
public AbstractBrower(File driverFile) {
|
||||
this.driverFile = driverFile;
|
||||
|
||||
// 存储页面信息
|
||||
informationJson.put("驱动所在路径", driverFile.getAbsolutePath());
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定驱动文件路径并添加一个待测站点
|
||||
*
|
||||
* @param driberFile 驱动文件对象
|
||||
* @param url 待测站点
|
||||
* @param pageName 待测站点名称,用于切换页面
|
||||
*/
|
||||
public AbstractBrower(File driberFile, String url) {
|
||||
this.driverFile = driberFile;
|
||||
this.url = url;
|
||||
|
||||
//TODO 初始化浏览器对应的基本信息,并在其他的方法中添加
|
||||
public AbstractBrower(File driverFile, String url, String pageName) {
|
||||
this(driverFile);
|
||||
nowPage = new Page(url, pageName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于返回当前站点的url,若当前未调用{@link #getDriver()}方法或浏览器启动失败时返回当前设置的待测站点
|
||||
* 指定驱动文件路径并添加一个待测站点
|
||||
*
|
||||
* @return 返回当前站点的url或设置的待测站点
|
||||
* @param driverFile 驱动文件对象
|
||||
* @param page {@link Page}类对象
|
||||
*/
|
||||
public String getUrl() {
|
||||
if (driver == null) {
|
||||
return url.toString();
|
||||
} else {
|
||||
return driver.getCurrentUrl();
|
||||
}
|
||||
public AbstractBrower(File driverFile, Page page) {
|
||||
this(driverFile);
|
||||
nowPage = page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于打开新的站点,当待测站点与原站点不同时,则根据传入的openNewLabel参数,则以以下方式进入站点:
|
||||
* 该方法用于打开新的站点,通过该方法将生成一个Page对象,存在类中,并根据传入的openNewLabel参数,则以以下方式进入站点:
|
||||
* <ul>
|
||||
* <li>openNewLabel为true,则重新打开一个标签页,在新的标签页中打开站点</li>
|
||||
* <li>openNewLabel为false,则在当前的标签页中打开站点</li>
|
||||
* </ul>
|
||||
* 注意:若未生成WebDriver对象时(即未调用{@link #getDriver()}方法时),该方法仅更改待测站点。执行该方法后,其
|
||||
* WebDriver对象将切换至新的标签页上
|
||||
* 注意:
|
||||
* <ol>
|
||||
* <li>若未生成WebDriver对象时(即未调用{@link #getDriver()}方法时),则抛出异常</li>
|
||||
* <li>若生成WebDriver对象但未设置默认页面时(即调用了{@link #AbstractBrower(File)}单参构造来构造对象),
|
||||
* 则在调用该方法时,无论openNewLabel传入是何值,均不影响在第一个标签中打开页面</li>
|
||||
* <li>执行该方法后,其WebDriver对象将切换至新的标签页上</li>
|
||||
* </ol>
|
||||
*
|
||||
* @param url 站点域名
|
||||
* @param openNewLabel 是否打开新的标签页
|
||||
* @param pageName 页面名称
|
||||
* @param openNewLabel 是否在新标签中打开页面
|
||||
* @throws IncorrectPageException 当浏览器未打开或者页面加载错误时抛出的异常
|
||||
*/
|
||||
public void openUrl(String url, boolean openNewLabel) {
|
||||
// 若未生成WebDriver对象,则只做设置
|
||||
public void openUrl(String url, String pageName, boolean openNewLabel) {
|
||||
// 若未生成WebDriver对象,则不做任何
|
||||
if (driver == null) {
|
||||
this.url = url;
|
||||
return;
|
||||
throw new IncorrectPageException("未打开浏览器");
|
||||
}
|
||||
|
||||
if (openNewLabel) {
|
||||
openNewLabelPage(url);
|
||||
// 将传入的参数简单封装成Page类,传入重载的方法中
|
||||
openUrl(new Page(url, pageName), openNewLabel);
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于打开新的站点,根据传入的openNewLabel参数,则以以下方式进入站点:
|
||||
* <ul>
|
||||
* <li>openNewLabel为true,则重新打开一个标签页,在新的标签页中打开站点</li>
|
||||
* <li>openNewLabel为false,则在当前的标签页中打开站点</li>
|
||||
* </ul>
|
||||
* 注意:
|
||||
* <ol>
|
||||
* <li>若未生成WebDriver对象时(即未调用{@link #getDriver()}方法时),则抛出异常</li>
|
||||
* <li>若生成WebDriver对象但未设置默认页面时(即调用了{@link #AbstractBrower(File)}单参构造来构造对象),
|
||||
* 则在调用该方法时,无论openNewLabel传入是何值,均不影响在第一个标签中打开页面</li>
|
||||
* <li>执行该方法后,其WebDriver对象将切换至新的标签页上</li>
|
||||
* </ol>
|
||||
*
|
||||
* @param newPage Page类对象
|
||||
* @param openNewLabel 是否在新标签中打开页面
|
||||
* @throws IncorrectPageException 当浏览器未打开或者页面加载错误时抛出的异常
|
||||
*/
|
||||
public void openUrl(Page newPage, boolean openNewLabel) {
|
||||
// 若未生成WebDriver对象,则抛出IncorrectPageException异常
|
||||
if (driver == null) {
|
||||
throw new IncorrectPageException("未打开浏览器");
|
||||
}
|
||||
|
||||
// 若pageList无元素,则表明此为第一次打开浏览器,则无论openNewLabel是何值,均按照同一规则打开页面
|
||||
// 若pageList有元素,则根据openNewLabel参数来决定如何打开新的页面
|
||||
if (pageList.size() == 0) {
|
||||
// 存储页面对象
|
||||
pageList.add(newPage);
|
||||
// 将当前页面对象指向newPage
|
||||
nowPage = newPage;
|
||||
// 在当前标签上打开页面
|
||||
overridePage();
|
||||
} else {
|
||||
overridePage(url);
|
||||
if (openNewLabel) {
|
||||
// 存储页面对象
|
||||
pageList.add(newPage);
|
||||
// 将当前页面对象指向newPage
|
||||
nowPage = newPage;
|
||||
// 在标签页上打开页面
|
||||
openNewLabelPage();
|
||||
} else {
|
||||
// 先在pageList移除nowPage
|
||||
pageList.set(pageList.indexOf(nowPage), newPage);
|
||||
// 将nowPage指向newPage
|
||||
nowPage = newPage;
|
||||
// 在当前标签上打开页面
|
||||
overridePage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于设置目标站点的title,以便进行链接是否正确的判断
|
||||
*
|
||||
* @param pageTitle 设置的目标站点title
|
||||
*/
|
||||
public void setAssertTitle(String assertTitle) {
|
||||
this.assertTitle = assertTitle;
|
||||
}
|
||||
// 遍历所有标签页,存储标签页信息
|
||||
JSONArray labelInformation = new JSONArray();
|
||||
pageList.forEach(page -> {
|
||||
labelInformation.add(page.getPageInformation());
|
||||
});
|
||||
// 存储标签页信息
|
||||
informationJson.put("标签信息", labelInformation);
|
||||
|
||||
/**
|
||||
* 该方法用于设置页面等待时间,单位为秒
|
||||
*
|
||||
* @param LoadTime 传入的时间
|
||||
*/
|
||||
public void setLoadTime(int loadTime) {
|
||||
this.loadTime = loadTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于设置页面的自动刷新次数,当设置该值后则开启自动刷新
|
||||
*
|
||||
* @param rafreshCount 自动刷新的次数
|
||||
*/
|
||||
public void setRafreshCount(int rafreshCount) {
|
||||
this.rafreshCount = rafreshCount;
|
||||
// 切换至相应的窗口
|
||||
driver.switchTo().window(nowPage.getHandle());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -133,7 +179,27 @@ public abstract class AbstractBrower {
|
|||
*
|
||||
* @return 指向浏览器的WebDriver对象
|
||||
*/
|
||||
public abstract WebDriver getDriver();
|
||||
public WebDriver getDriver() {
|
||||
// 若driver对象未生成,则进行开启浏览器的操作
|
||||
if (driver == null) {
|
||||
// 打开浏览器
|
||||
openBrower();
|
||||
|
||||
// 若存在需要打开的页面,则打开第一个页面
|
||||
if (nowPage != null) {
|
||||
openUrl(nowPage, false);
|
||||
}
|
||||
}
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于打开浏览器
|
||||
*
|
||||
* @return {@link WebDriver}类对象
|
||||
*/
|
||||
abstract void openBrower();
|
||||
|
||||
/**
|
||||
* 获取浏览器的名称
|
||||
|
@ -155,17 +221,24 @@ public abstract class AbstractBrower {
|
|||
* @return 操作系统信息
|
||||
*/
|
||||
// public abstract String getSystemInformation();
|
||||
|
||||
public HashMap<String, String> getAllInformation() {
|
||||
return
|
||||
|
||||
public JSONObject getAllInformation() {
|
||||
return informationJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回浏览器的各项信息
|
||||
* @param key
|
||||
* @return
|
||||
* 用于根据名称返回对浏览器的各项信息,若信息不存在,则返回空
|
||||
*
|
||||
* @param key 需要搜索的信息名称
|
||||
* @return 名称对应的浏览器信息
|
||||
*/
|
||||
public abstract String getInformation(String key);
|
||||
public String getInformation(String key) {
|
||||
if (informationJson.containsKey(key)) {
|
||||
return informationJson.getString(key);
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于重启浏览器,若未生成WebDriver对象时(即未调用{@link #getDriver()}方法时),则方法调用无效
|
||||
|
@ -206,71 +279,32 @@ public abstract class AbstractBrower {
|
|||
}
|
||||
|
||||
/**
|
||||
* 该方法用于对浏览器的一系列操作,包括全屏浏览器,跳转相应的站点,等待页面加载以及自动刷新,
|
||||
* 该方法用于对浏览器的一系列操作,包括全屏浏览器,跳转相应的站点,等待页面加载以及页面错误重载,
|
||||
* 使用该方法时会抛出两个运行时异常,分别为IncorrectPageTitleException和PageNotFoundException
|
||||
*
|
||||
* @param driver 通过start()方法创建的WebDriver对象
|
||||
* @param driver WebDriver对象
|
||||
* @return 返回对浏览器进行操作后的得到的WebDriver对象
|
||||
* @throws IncorrectPageTitleException 页面title与设置的title不一致时抛出的异常
|
||||
* @throws PageNotFoundException 页面加载失败时抛出的异常
|
||||
* @throws IncorrectPageException 页面title与设置的title不一致时抛出的异常
|
||||
*/
|
||||
protected WebDriver oprateBrower(WebDriver driver) {
|
||||
// 将设置的自动刷新次数存储在临时变量中,并加上1
|
||||
// 加1的目的是自动刷新判断是用do...while循环实现,若不事先加上1在会导致循环少1次
|
||||
int rafresh = rafreshCount + 1;
|
||||
|
||||
String errorTitle = "页面载入出错";
|
||||
|
||||
// 进入站点
|
||||
driver.get(url);
|
||||
WebDriver oprateBrower() {
|
||||
// 全屏浏览器
|
||||
driver.manage().window().maximize();
|
||||
|
||||
// 循环执行页面加载判断,判断其是否加载出目标站点,若加载出来页面,则结束循环,若用户设置的自动刷新次数循环完还没加载出页面,则
|
||||
// 抛出PageNotFoundException异常。页面加载判断必须读取一次,所以使用do...while循环
|
||||
do {
|
||||
// 读取并设置浏览器等待时间
|
||||
driver.manage().timeouts().pageLoadTimeout(loadTime, TimeUnit.SECONDS);
|
||||
|
||||
// 判断进入站点后页面的title是否为“页面载入出错”,若为该title,则刷新页面,重新加载
|
||||
// 注意,在火狐浏览器中凡是加载不出的页面,其页面title都是“页面载入出错”,所以该方法只适用于火狐浏览器
|
||||
if (errorTitle.equals(driver.getTitle())) {
|
||||
// 将刷新次数减1
|
||||
rafresh--;
|
||||
// 刷新网页
|
||||
driver.navigate().refresh();
|
||||
// 不执行后续代码,继续循环
|
||||
continue;
|
||||
}
|
||||
|
||||
// 若页面加载成功,则判断加载的页面是否与用户设置的一致,若用户未设置目标站点的title,则跳过判断
|
||||
// 判断pageTitle中存储的信息是否为空,若不为空则再判断页面的title是否与设置的title一致,若不一致,则抛出IncorrectPageTileException
|
||||
if (!assertTitle.toString().equals("") && !driver.getTitle().equals(assertTitle.toString())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 若页面能正常加载,置空pageTitle并返回WebDriver对象
|
||||
assertTitle = "";
|
||||
return driver;
|
||||
|
||||
// 判断的条件刷新次数rafresh为0时则结束循环
|
||||
} while (rafresh != 0);
|
||||
|
||||
// 若循环结束,则说明页面无法正常加载,则置空pageTitle,抛出PageNotFountException
|
||||
assertTitle = "";
|
||||
throw new IncorrectPageTitleException("页面载入出错");
|
||||
throw new IncorrectPageException("页面载入出错");
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于新增一个标签页,并打开指定站点
|
||||
*
|
||||
* @param url 指定的站点
|
||||
* @throws IncorrectPageException 当页面无法加载时抛出
|
||||
*/
|
||||
void openNewLabelPage(String url) {
|
||||
private String openNewLabelPage() {
|
||||
// 获取当前所有的handle
|
||||
Set<String> handleSet = driver.getWindowHandles();
|
||||
// 编写js脚本,执行js,以开启一个新的标签页
|
||||
String js = "window.open(\"" + url + "\");";
|
||||
String js = "window.open(\"\");";
|
||||
((JavascriptExecutor) driver).executeScript(js);
|
||||
// 移除原有的windows的Handle,保留新打开的windows的Handle
|
||||
String newHandle = "";
|
||||
|
@ -280,8 +314,13 @@ public abstract class AbstractBrower {
|
|||
break;
|
||||
}
|
||||
}
|
||||
// 切换WebDriver
|
||||
driver.switchTo().window(newHandle);
|
||||
|
||||
// 设置页面的Handle
|
||||
nowPage.setHandle(newHandle);
|
||||
// 加载页面
|
||||
loadPage(nowPage);
|
||||
|
||||
return nowPage.getHandle();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -289,42 +328,47 @@ public abstract class AbstractBrower {
|
|||
*
|
||||
* @param url 指定的站点
|
||||
*/
|
||||
void overridePage(String url) {
|
||||
driver.get(url);
|
||||
private String overridePage() {
|
||||
// 设置页面的Handle
|
||||
nowPage.setHandle(driver.getWindowHandle());
|
||||
// 加载页面
|
||||
loadPage(nowPage);
|
||||
|
||||
return nowPage.getHandle();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>AbstractBrower.java</p>
|
||||
* <p><b>用途:</b>用于对浏览器特殊设置的字段说明</p>
|
||||
* <p><b>编码时间:</b>2020年4月7日 下午9:38:46</p>
|
||||
* <p><b>修改时间:</b>2020年4月7日 下午9:38:46</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 12
|
||||
* 用于加载页面
|
||||
*
|
||||
* @param newPage 页面类对象
|
||||
*/
|
||||
class BrowerSetField {
|
||||
/**
|
||||
* 存储key的名称
|
||||
*/
|
||||
public String keyName;
|
||||
/**
|
||||
* 存储key值
|
||||
*/
|
||||
public String key;
|
||||
/**
|
||||
* 存储相应的设置值
|
||||
*/
|
||||
public String value;
|
||||
/**
|
||||
* 初始化字段值
|
||||
* @param keyName key的名称
|
||||
* @param key key值
|
||||
* @param value 存储相应的设置值
|
||||
*/
|
||||
public BrowerSetField(String keyName, String key, String value) {
|
||||
this.keyName = keyName;
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
private void loadPage(Page newPage) {
|
||||
// 切换窗口
|
||||
driver.switchTo().window(newPage.getHandle());
|
||||
// 加载页面,若页面无法加载,则抛出IncorrectPageException
|
||||
if (!newPage.loadPage(driver)) {
|
||||
throw new IncorrectPageException("页面无法加载");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于根据页面的名称查找窗口的Handle
|
||||
*
|
||||
* @param pageName 页面名称
|
||||
* @return 页面对应窗口的Handle
|
||||
*/
|
||||
private String findPageHandle(String pageName) {
|
||||
// 存储查找到的handle
|
||||
String handle = "";
|
||||
|
||||
// 循环,查找与pageName对应的Page对象,并返回相应的Handle
|
||||
for (Page page : pageList) {
|
||||
if (page.getPageName().equals(pageName)) {
|
||||
handle = page.getHandle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package pres.auxiliary.work.selenium.browers;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>IncorrectPageException.java</p>
|
||||
* <p><b>用途:</b>当页面配置错误或加载有误时抛出</p>
|
||||
* <p><b>编码时间:</b>2020年4月9日下午6:07:53</p>
|
||||
* <p><b>修改时间:</b>2020年4月9日下午6:07:53</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 12
|
||||
*
|
||||
*/
|
||||
public class IncorrectPageException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public IncorrectPageException() {
|
||||
super();
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public IncorrectPageException(String message, Throwable cause, boolean enableSuppression,
|
||||
boolean writableStackTrace) {
|
||||
super(message, cause, enableSuppression, writableStackTrace);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public IncorrectPageException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public IncorrectPageException(String message) {
|
||||
super(message);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public IncorrectPageException(Throwable cause) {
|
||||
super(cause);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,193 @@
|
|||
package pres.auxiliary.work.selenium.browers;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>Page.java</p>
|
||||
* <p><b>用途:</b>用于存储对浏览器加载的页面信息以及页面操作</p>
|
||||
* <p><b>编码时间:</b>2020年4月10日上午8:02:45</p>
|
||||
* <p><b>修改时间:</b>2020年4月10日上午8:02:45</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 12
|
||||
*
|
||||
*/
|
||||
public class Page {
|
||||
/**
|
||||
* 用于接收用户需要进入的网站
|
||||
*/
|
||||
private String url = "";
|
||||
/**
|
||||
* 存储页面加载等待时间
|
||||
*/
|
||||
private int loadTime = 120;
|
||||
/**
|
||||
* 用于存储目标站点的title
|
||||
*/
|
||||
private String assertTitle = "";
|
||||
/**
|
||||
* 用于存储页面的名称
|
||||
*/
|
||||
private String pageName = "NewPage";
|
||||
/**
|
||||
* 存储页面在窗口上的handle
|
||||
*/
|
||||
private String handle = "";
|
||||
/**
|
||||
* 用于存储页面自动刷新的次数,默认为0次
|
||||
*/
|
||||
int rafreshCount = 0;
|
||||
|
||||
/**
|
||||
* 用于存储浏览器启动时的信息
|
||||
*/
|
||||
private JSONObject pageInformationJson = new JSONObject();
|
||||
|
||||
/**
|
||||
* 初始化需要打开页面url以及站点的名称
|
||||
* @param url 待测站点url
|
||||
* @param pageName 站点名称
|
||||
*/
|
||||
public Page(String url, String pageName) {
|
||||
this.url = url;
|
||||
this.pageName = pageName;
|
||||
|
||||
//存储页面信息
|
||||
pageInformationJson.put("待测站点入口url", url);
|
||||
pageInformationJson.put("页面加载时间", loadTime);
|
||||
// pageInformationJson.put("页面标题断言", assertTitle);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回存储的页面名称
|
||||
* @return 页面名称
|
||||
*/
|
||||
public String getPageName() {
|
||||
return pageName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回待测站点的url
|
||||
* @return 待测站点的url
|
||||
*/
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回页面所在窗口的handle
|
||||
* @return 页面名称
|
||||
*/
|
||||
public String getHandle() {
|
||||
return handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置页面所在窗口的handle
|
||||
* @param handle handle值
|
||||
*/
|
||||
public void setHandle(String handle) {
|
||||
this.handle = handle;
|
||||
//存储页面所在窗口的handle信息
|
||||
pageInformationJson.put("页面所在窗口", handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置页面加载时间
|
||||
* @param loadTime 页面加载时间
|
||||
*/
|
||||
public void setLoadTime(int loadTime) {
|
||||
this.loadTime = loadTime;
|
||||
//存储加载时间信息
|
||||
pageInformationJson.put("页面加载时间", loadTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置对页面的标题断言
|
||||
* @param assertTitle 标题断言
|
||||
*/
|
||||
public void setAssertTitle(String assertTitle) {
|
||||
this.assertTitle = assertTitle;
|
||||
|
||||
pageInformationJson.put("页面断言", assertTitle);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置对页面自动加载次数的限制
|
||||
* @param rafreshCount 加载次数限制
|
||||
*/
|
||||
public void setRafreshCount(int rafreshCount) {
|
||||
this.rafreshCount = rafreshCount;
|
||||
|
||||
pageInformationJson.put("页面重载次数", rafreshCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以Json形式返回当前页面的信息
|
||||
* @return 当前页面的信息
|
||||
*/
|
||||
public JSONObject getPageInformation() {
|
||||
return pageInformationJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于通过浏览器加载页面,并根据页面断言,返回页面是否加载成功。若未设置断言,则无论
|
||||
* 页面是否成功加载,均返回true
|
||||
* @param driver WebDriver对象,通过可通过{@link AbstractBrower}类及其子类来生成
|
||||
* @return 根据页面断言返回页面是否加载成功
|
||||
*/
|
||||
public boolean loadPage(WebDriver driver) {
|
||||
// 将设置的自动刷新次数存储在临时变量中,并加上1
|
||||
// 加1的目的是自动刷新判断是用do...while循环实现,若不事先加上1在会导致循环少1次
|
||||
int rafresh = rafreshCount + 1;
|
||||
|
||||
// 进入站点
|
||||
driver.get(url);
|
||||
// 读取并设置浏览器等待时间
|
||||
driver.manage().timeouts().pageLoadTimeout(loadTime, TimeUnit.SECONDS);
|
||||
|
||||
// 循环执行页面加载判断,判断其是否加载出目标站点,若加载出来页面,则结束循环,若用户设置的自动刷新次数循环完还没加载出页面,则
|
||||
// 抛出PageNotFoundException异常。页面加载判断必须读取一次,所以使用do...while循环
|
||||
do {
|
||||
// 若页面加载成功,则判断加载的页面是否与用户设置的一致,若用户未设置目标站点的title,则跳过判断
|
||||
if (!judgeAssert(driver)) {
|
||||
// 将刷新次数减1
|
||||
rafresh--;
|
||||
// 刷新网页
|
||||
driver.navigate().refresh();
|
||||
// 不执行后续代码,继续循环
|
||||
continue;
|
||||
}
|
||||
|
||||
//若通过判断,则返回相应的WebDriver对象
|
||||
return true;
|
||||
|
||||
// 判断的条件刷新次数rafresh为0时则结束循环
|
||||
} while (rafresh != 0);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于对加载的页面信息与断言对比 ,返回对比结果
|
||||
* @param driver WebDriver对象
|
||||
* @return
|
||||
*/
|
||||
private boolean judgeAssert(WebDriver driver) {
|
||||
//若页面断言为空,则直接返回true
|
||||
if (assertTitle.isEmpty()) {
|
||||
return true;
|
||||
} else {
|
||||
//若页面断言不为空且页面信息与断言不相同,则返回false
|
||||
if (!driver.getTitle().equals(assertTitle)) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,8 +12,9 @@ public class TestOpenNewHandle {
|
|||
|
||||
@BeforeClass
|
||||
public void openBrower() {
|
||||
System.setProperty("webdriver.chrome.driver", "Resource/BrowersDriver/chromedriver.exe");
|
||||
System.setProperty("webdriver.chrome.driver", "Resource/BrowersDriver/Chrom/78.0394.70/chromedriver.exe");
|
||||
cd = new ChromeDriver();
|
||||
cd.get("http://www.baidu.com");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
|
@ -42,7 +43,7 @@ public class TestOpenNewHandle {
|
|||
//获取当前所有的handle
|
||||
Set<String> handleSet = cd.getWindowHandles();
|
||||
//编写js脚本,执行js,以开启一个新的标签页
|
||||
String js = "window.open(\"https://www.sogou.com\");";
|
||||
String js = "window.open(\"\");";
|
||||
cd.executeScript(js);
|
||||
//移除原有的windows的Handle,保留新打开的windows的Handle
|
||||
String newHandle = "";
|
||||
|
@ -55,7 +56,7 @@ public class TestOpenNewHandle {
|
|||
//切换WebDriver
|
||||
cd.switchTo().window(newHandle);
|
||||
Thread.sleep(2000);
|
||||
cd.get("http://www.hao123.com");
|
||||
// cd.get("http://www.hao123.com");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue