查看谷歌浏览器版本:
设置里 或者 访问: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
**************************************************************************
然后放到谷歌同目录下,防止后续忘记放哪里了
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可以直接启动谷歌浏览器,并打开百度。
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
getElementsByClassName(String className); - /** 从w的子元素开始查找,通过class获取元素 **/
- List
getElementsByClassName(WebElement w, String className); - /** 通过<标签名>获取元素列表 **/
- List
getElementsByTagName(String tagName); - /** 从w的子元素开始查找,通过<标签名>获取元素列表 **/
- List
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 getFirstElement(List 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
getElementsByClassName(String className){ - return driver.findElements(By.className(className));
- }
-
- public List
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
getElementsByClassName(WebElement w,String className){ - return w.findElements(By.className(className));
- }
-
- public List
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 getFirstElement(List 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
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();
- }
- }