文章目录
✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。

本文开始
浏览器复用
1. 复用浏览器作用
复用浏览器好处:
1.自动化测试过程中,需要人为介入场景
如:人为扫描登录等情况
2.提高调试 UI 自动化测试脚本效率
如:可以复用浏览器,再已经登录的页面进行自动化操作
2. 复用已有浏览器-配置步骤
- 需要退出当前所有的谷歌浏览器(特别注意)
包括后台进程中的都需要查看-win环境 - 输入启动命令,通过命令启动谷歌浏览器
前提配置:
a. 找到 chrome 的启动路径(下一页 ppt)s
b. 配置环境变量(下一页 ppt) - 验证是否启动成功
启动命令:
windows:
bash
chrome --remote-debugging-port=9222
mac:
bash
Google\ Chrome --remote-debugging-port=9222
【注】想要代码中复用浏览器,必须先启动浏览器
验证启动成功命令
浏览器输入:localhost:9222
如果页面显示空白,不是错误提示,代表启动成功;
浏览器环境变量配置
windows 环境变量配置:
- 获取chrome启动路径
- 配置环境变量-将chrome浏览器路径配置到系统环境变量中(win-path路径中)
- 重启命令行,执行命令验证(也就是执行-chrome --remote-debugging-port=9222)
【注】前提-win 需要关闭谷歌浏览器全部进程
Mac 环境变量配置
1.获取启动路径(注意:使用 tab 键,不要手动输入)
2.将启动路径配置到环境变量中
bash
export PATH=$PATH:/Applications/Google\ Chrome.app/Contents/MacOS
复用浏览器适用场景
场景 1:
企业微信登录无法通过输入用户名密码的方式解决登录问题,后面所有的脚本都无法执行。
解决方案:
通过 remote 复用浏览器人工登录企业微信,不用多次登录,后面的脚本自动执行。
场景 2:
编写自动化测试脚本过程中,用例的某一步骤出现问题。调试时需要将此步骤前面所有的步骤执行完成之后再复现调试。
解决方案:
使用复用浏览器的方式,使浏览器到执行的某个步骤(跳过前面的自动化执行步骤),轻松复现出问题的场景,只对问题行代码进行调试(不用重复登录等过程);
3. 代码中复用已有浏览器
python代码中配置:
【注】前提:需要命令行执行浏览器启动命令,再在代码中使用命令,不然不生效代码;
python
from selenium.webdriver.chrome.options import Options
option = Options()
option.debugger_address = "localhost:9222"
self._driver = webdriver.Chrome(options=option)
self._driver.get("https://work.weixin.qq.com/wework_admin/frame")
java代码中配置
【注】前提:需要命令行执行浏览器启动命令,再在代码中使用命令,不然不生效代码;
java
public class RemoteTest {
@Test
void remoteLogin(){
// 1.设置chromeOptions实例对象
ChromeOptions chromeOptions = new ChromeOptions();
// 2.配置debug地址
chromeOptions.setExperimentalOption("debuggerAddress","localhost:9222");
// 3.初始化浏览器并添加配置信息
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://baidu.com/");
}
}
2. Cookie的复用
Cookie 是一些认证数据信息,存储在电脑的浏览器上,每次请求会带上Cookie信息,服务器会验证相遇Cookie;
使用Cookie自动化登录的理由
- 复用浏览器仍然在每次用例开始都需要人为介入
- 若用例需要经常执行,复用浏览器则不是一个好的选择
- 大部分cookie的时效性都很长,扫一次可以使用多次
Cookie复用流程
添加前置依赖
yaml
<properties>
<!--对应解析-->
<jackson.version>2.13.1</jackson.version>
</properties>
<dependencies>
<!--yaml文件解析-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
Java代码实现Cookie复用
核心:
获取 cookie driver.manage().getCookies();
添加 cookie driver.manage().addCookie()
java
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import static java.lang.Thread.sleep;
public class CookieTest {
private static ChromeDriver driver;
private static WebDriverWait wait;
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
@BeforeAll
static void setupClass(){
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
wait = new WebDriverWait(driver,Duration.ofSeconds(30));
}
@AfterAll
static void afterAll() throws InterruptedException {
Thread.sleep(10000);
driver.quit();
}
// Cookie读取的步骤
@Test
public void saveCookies() throws IOException {
// 1. 访问企业微信登陆页面
driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx");
// 2. 手动扫码登录,确定成功跳转页面
// 3. 显式等待判断当前的url不等于前面获取的url
// wait.until(webDriver -> !webDriver.getCurrentUrl().equals(url));
//验证页面url包含路径xxx
wait.until(ExpectedConditions.urlContains("https://work.weixin.qq.com/wework_admin/frame"));
// 4. 登录成功后获取当前的cookie信息
Set<Cookie> cookies = driver.manage().getCookies();
// 5. 将获取的Cookie写入cookie文件
mapper.writeValue(new File("cookies.yaml"), cookies);
}
// Cookie写入的步骤
@Test
void loadCookies() throws IOException {
//1.访问企业微信登陆页面
driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx");
//2.从yaml文件读取cookies信息
TypeReference<List<HashMap<String,Object>>> typeRef = new TypeReference<>(){};
List<HashMap<String, Object>> cookies = mapper.readValue(new File("cookies.yaml"), typeRef);
//3.将cookies信息使用add方法添加到浏览器中
cookies.stream().forEach(cookie -> {
driver.manage().addCookie(new Cookie(
cookie.get("name").toString(),
cookie.get("value").toString()
));
});
//4.刷新页面
driver.navigate().refresh();
}
【注】如果存储的 Cookie 来自多个不同网站,而只想恢复特定网站(如企业微信)的登录状态时使用。
java
// 使用过滤
.filter(cookie -> cookie.get("domain").toString().
contains("work.weixin.qq.com"))
总结
✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

