selenium java封装_Java Selenium封装--RemoteWebDriver

这个博客介绍了如何使用Java封装Selenium的RemoteWebDriver,包括导航、退出、刷新、窗口切换、JS弹框操作、Frame切换、执行JS脚本、处理Cookie、截图等方法的实现。
摘要由CSDN通过智能技术生成

package com.selenium.driver;

import java.io.File;

import java.io.IOException;

import java.net.URL;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;

import org.openqa.selenium.Alert;

import org.openqa.selenium.Capabilities;

import org.openqa.selenium.Cookie;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.NoSuchElementException;

import org.openqa.selenium.OutputType;

import org.openqa.selenium.TakesScreenshot;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.remote.Augmenter;

import org.openqa.selenium.remote.RemoteWebDriver;

import org.openqa.selenium.remote.RemoteWebElement;

public class JSWebDriver{

private RemoteWebDriver wd = null;

private JavascriptExecutor jse = null;

public JSWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {

wd = new RemoteWebDriver(remoteAddress, desiredCapabilities);

}

///

///浏览器url导航

///

public void goTo(String url){

wd.get(url);

}

///

///浏览器退出

///

public void quit(){

wd.quit();

}

///

///浏览器后退

///

public void back(){

wd.navigate().back();

}

///

///浏览器前进

///

public void forward(){

wd.navigate().forward();

}

///

///浏览器刷新

///

public void refresh(){

wd.navigate().refresh();

}

///

///切换到新浏览器窗口;按照title、url、index;支持正则匹配

///

public void switchToWindow(String by, String value, String...match) throws Exception{

String currenthandle = wd.getWindowHandle();

Set handles = wd.getWindowHandles();

int currentIndex = -1;

String searchString = "";

for(String handle : handles){

currentIndex += 1;

if(handle.equals(currenthandle)){

continue;

}else{

wd.switchTo().window(handle);

if (match.length == 1 && match[0].equals("regex")){

if (by.equals("title")){

searchString = wd.getTitle();

}else if (by.equals("url")){

searchString = wd.getCurrentUrl();

}

Pattern pattern = Pattern.compile(value);

Matcher matcher = pattern.matcher(searchString);

if(matcher.find()){

return;

}

}else{

if (by.equals("title")){

searchString = wd.getTitle();

}else if (by.equals("url")){

searchString = wd.getCurrentUrl();

}else if (by.equals("index")){

searchString = Integer.toString(currentIndex);

}

if(searchString.equals(value)){

return;

}

}

}

}

Exception e = new Exception("Swtich Window Failed, Please Make Sure The Locator Was Right.");

throw e;

}

///

///JS弹框确认

///

public void clickAlertSure(){

Alert alert = wd.switchTo().alert();

alert.accept();

}

///

///JS弹框取消

///

public void clickAlertDismiss()

{

Alert alert = wd.switchTo().alert();

alert.dismiss();

}

///

///设置prompt弹框内容

///

public void setPromptMessage(String parameter){

Alert alert = wd.switchTo().alert();

alert.sendKeys(parameter);

}

///

///获取JS弹框内容

///

public String getPromptMessage(){

Alert alert = wd.switchTo().alert();

return alert.getText();

}

///

///切换到Frame窗口;先定位到iframe元素

///

public void switchToFrame(JSWebElement jselement){

wd.switchTo().frame(jselement.getNativeWebElement());

}

///

///执行JS脚本

///

public void executeScript(String parameter){

JavascriptExecutor js = getJSE();

js.executeScript(parameter);

}

///

///获取指定cookie

///

public String getCookie(String name){

Cookie cookie=wd.manage().getCookieNamed(name);

if (cookie == null){ return "null"; }

return cookie.getValue();

}

///

///获取所有cookie

///

public Map getCookies(){

Map newCookies = new HashMap();

Set cookies= wd.manage().getCookies();

for (Cookie cookie : cookies){

newCookies.put(cookie.getName(), cookie.getValue());

}

return newCookies;

}

///

///截取屏幕

///

public void getScreen(String filepath){

WebDriver augmentedDriver = new Augmenter().augment(this.wd);

TakesScreenshot ts = (TakesScreenshot) augmentedDriver;

File screenShotFile = ts.getScreenshotAs(OutputType.FILE);

try {

FileUtils.copyFile (screenShotFile, new File(filepath));

}catch (IOException e){

e.printStackTrace();

}

}

///

///获取title

///

public String getTitle(){

return wd.getTitle();

}

///

///获取url

///

public String getUrl(){

return wd.getCurrentUrl();

}

///

///获取HTML源码

///

public String getSource(){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

return wd.getPageSource();

}

///

///滚动页面到指定位置

///

public void scroll(String x, String y){

if (x.equals("left")){

x = "0";

}else if (x.equals("right")){

x = "document.body.scrollWidth";

}else if (x.equals("middle")){

x = "document.body.scrollWidth/2";

}

if (y.equals("top")){

y = "0";

}else if (y.equals("buttom")){

y = "document.body.scrollHeight";

}else if (y.equals("middle")){

y = "document.body.scrollHeight/2";

}

this.executeScript(String.format("scroll(%s,%s);", x, y));

}

///

///最大化浏览器

///

public void maximize(){

wd.manage().window().maximize();

}

public JSWebElement findElementById(String using) {

try {

return new JSWebElement((RemoteWebElement)wd.findElementById(using));

}catch (NoSuchElementException e){

return new JSWebElement();

}

}

public JSWebElement findElementByCssSelector(String using) {

try {

return new JSWebElement((RemoteWebElement)wd.findElementByCssSelector(using));

}catch (NoSuchElementException e){

return new JSWebElement();

}

}

public JSWebElement findElementByXPath(String using) {

try {

return new JSWebElement((RemoteWebElement)wd.findElementByXPath(using));

}catch (NoSuchElementException e){

return new JSWebElement();

}

}

public JSWebElement findElementByLinkText(String using) {

try {

return new JSWebElement((RemoteWebElement)wd.findElementByLinkText(using));

}catch (NoSuchElementException e){

return new JSWebElement();

}

}

public JSWebElement findElementByDom(String using) {

try {

JavascriptExecutor js = this.getJSE();

WebElement we = (WebElement)js.executeScript(String.format("return %s", using));

return new JSWebElement((RemoteWebElement)we);

}catch (NoSuchElementException e){

return new JSWebElement();

}

}

///

///获取原生的RemoteWebdriver对象

///

public RemoteWebDriver getNativeWebDriver(){

return this.wd;

}

private JavascriptExecutor getJSE(){

if (this.jse == null){

this.jse = (JavascriptExecutor) this.wd;

}

return jse;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值