1、引入依赖,导入jar太多了
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.25.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.25.0</version>
</dependency>
2、下载驱动
查看谷歌浏览器版本:
设置里 或者 访问:chrome://version/
结果:106.0.5249.119 (正式版本) (64 位)
下载控制驱动,打开
http://chromedriver.storage.googleapis.com/index.html
找到对应版本的驱动
我的版本对应 106.0.5249.61
不确定就进去文件夹,里面有notes.txt文件。
**************************************************************************
---------ChromeDriver 106.0.5249.61 (2022-09-28)---------
Supports Chrome version 106
**************************************************************************
然后放到谷歌同目录下,防止后续忘记放哪里了
3、测试代码:
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");//驱动路径
ChromeOptions options=new ChromeOptions();
options.addArguments("user-data-dir=D:/tmp/User Data");//用户数据文件夹,随便设置,不能没有
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.baidu.com/");
}
运行main可以直接启动谷歌浏览器,并打开百度。
4、后续教程
https://blog.csdn.net/scratlc/article/details/62044040?app_version=5.9.0&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2262044040%22%2C%22source%22%3A%22qq_43319748%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app
代码参考
公共方法规范接口,仿js方法
package com.example;
import org.openqa.selenium.WebElement;
import java.util.List;
public interface CommonServiceApi {
/** 通过id获取元素 **/
WebElement getElementById(String id);
/** 从w的子元素开始查找,通过id获取元素 **/
WebElement getElementById(WebElement w, String id);
/** 通过class获取元素 **/
List<WebElement> getElementsByClassName(String className);
/** 从w的子元素开始查找,通过class获取元素 **/
List<WebElement> getElementsByClassName(WebElement w, String className);
/** 通过<标签名>获取元素列表 **/
List<WebElement> getElementsByTagName(String tagName);
/** 从w的子元素开始查找,通过<标签名>获取元素列表 **/
List<WebElement> getElementsByTagName(WebElement w, String tagName);
/** 通过name获取元素 **/
WebElement getElementsByName(String name);
/** 从w的子元素开始查找,通过name获取元素 **/
WebElement getElementsByName(WebElement w, String name);
/** 通过指定路径获取元素 **/
WebElement getElementByXpath(String path);
/** 从w的子元素开始查找,通过指定路径获取元素 **/
WebElement getElementByXpath(WebElement w, String path);
/** 从列表中获取第一个元素,没有就返回null **/
<T> T getFirstElement(List<T> list);
/** 获取当前元素的父元素 **/
WebElement getParentElement(WebElement w);
/** 设置input类型元素的value **/
void setInputValue(WebElement w, String string);
/** 比较当前元素的文本值和目标值 **/
boolean equalsText(WebElement w, String text);
/** 比较当前元素指定的属性值和目标值 **/
boolean equalsAttribute(WebElement w, String name, String value);
}
公共配置抽象类: 实现公共方法,提供子类启动入口
package com.example;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public abstract class WebCommonService implements CommonServiceApi{
public SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
public String path;
public String url;
public WebDriver driver;
public WebCommonService(){
init();
}
/**
* 初始化
*/
public void init(){
System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");
ChromeOptions options=new ChromeOptions();
options.addArguments("user-data-dir=D:/tmp/User Data");
driver = new ChromeDriver(options);
}
/**
* 入口
*/
public abstract void start();
/**
* **************************************************************************
* **************************************************************************
*
* 通用函数
*
* **************************************************************************
* **************************************************************************
*/
public void log(Object string){
System.out.println("["+sf.format(new Date())+"]:"+string);
}
public void _wait(long SSS){
try {
Thread.sleep(SSS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public boolean isEmpty(Object o){
if(o==null)return true;
if(o instanceof String){
return "".equals(o);
}else{
return false;
}
}
/**
* **************************************************************************
* **************************************************************************
*
* 元素api操作
*
* **************************************************************************
* **************************************************************************
*/
public WebElement getElementById(String id){
return driver.findElement(By.id(id));
}
public List<WebElement> getElementsByClassName(String className){
return driver.findElements(By.className(className));
}
public List<WebElement> getElementsByTagName(String tagName){
return driver.findElements(By.tagName(tagName));
}
public WebElement getElementsByName(String name){
return driver.findElement(By.name(name));
}
public WebElement getElementById(WebElement w,String id){
return w.findElement(By.id(id));
}
public List<WebElement> getElementsByClassName(WebElement w,String className){
return w.findElements(By.className(className));
}
public List<WebElement> getElementsByTagName(WebElement w,String tagName){
return w.findElements(By.tagName(tagName));
}
public WebElement getElementsByName(WebElement w,String name){
return w.findElement(By.name(name));
}
public <T> T getFirstElement(List<T> list){
if(list==null||list.size()<1)return null;
return list.get(0);
}
public WebElement getElementByXpath(String path){
return driver.findElement(By.xpath(path));
}
public WebElement getElementByXpath(WebElement w,String path){
return w.findElement(By.xpath(path));
}
public WebElement getParentElement(WebElement w){
return getElementByXpath(w,"..");
}
public void setInputValue(WebElement w,String string){
if(isEmpty(string)){
((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]", w, "");
}else {
((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]", w, string);
}
//这两个操作是用来触发vue的数据刷新机制
w.sendKeys(Keys.SPACE);
if(!equalsText(w,string)){//按一下空格键,发现输入框内容发生变化,删除输入的空格,没变化说明没添加上空格,不用删除
w.sendKeys(Keys.BACK_SPACE);
}
}
public boolean equalsText(WebElement w,String text){
return w!=null&&text.equals(w.getText());
}
public boolean equalsAttribute(WebElement w,String name,String value){
return w!=null&&value.equals(w.getAttribute(name));
}
}
实现一个脚本类
package com.example.test;
import com.example.WebCommonService;
import org.openqa.selenium.WebElement;
import java.util.List;
public class TestScript extends WebCommonService {
@Override
public void start() {
driver.get("http://localhost:81/index2.html");
//点击素材实用
List<WebElement> list= getElementsByClassName("el-menu-item");
for(WebElement w:list){
WebElement span=getFirstElement(getElementsByTagName(w,"span"));
if(equalsText(span,"素材实用")){
w.click();
break;
}
}
list.clear();
//切换iframe
list= getElementsByClassName("el-tab-pane");
for(WebElement w:list){
if(!equalsAttribute(w,"aria-hidden","true")){
WebElement frame=getFirstElement(getElementsByTagName(w,"iframe"));
driver.switchTo().frame(frame);
break;
}
}
list.clear();
//打开编辑模式
WebElement switchButton=getFirstElement(getElementsByClassName("el-switch"));
if(switchButton!=null){
switchButton.click();
}
//打开微博热榜编辑页面
list= getElementsByClassName("a1");
for(WebElement w:list){
if(equalsText(w,"微博热榜")){
w.click();
}
}
list.clear();
//把 微博热榜 改为 微博微博
WebElement dialogBody=getFirstElement(getElementsByClassName("el-dialog__body"));
WebElement titleInput=getFirstElement(getElementsByTagName(dialogBody,"input"));
setInputValue(titleInput,"微博热榜");
_wait(1000);
//保存
list=getElementsByClassName(getParentElement(dialogBody),"el-button--primary");
for(WebElement w:list){
WebElement span=getFirstElement(getElementsByTagName(w,"span"));
if(equalsText(span,"保存") ){
w.click();
break;
}
}
list.clear();
//处理二次确认弹窗
WebElement confirm=getFirstElement(getElementsByClassName("el-message-box__wrapper"));
list=getElementsByTagName(confirm,"button");
for(WebElement w:list){
WebElement span=getFirstElement(getElementsByTagName(w,"span"));
if(equalsText(span,"确定")){
w.click();
break;
}
}
//关闭
list=getElementsByClassName(getParentElement(dialogBody),"el-button--default");
for(WebElement w:list){
WebElement span=getFirstElement(getElementsByTagName(w,"span"));
if(equalsText(span,"取 消")){
w.click();
break;
}
}
list.clear();
}
public static void main(String[] args) {
new TestScript().start();
}
}