为什么要学习Selenium
-
自动化测试
-
Selenium是最受欢迎的Web应用程序自动化测试工具之一。
-
通过学习Selenium,可以编写自动化测试脚本,用于自动执行各种任务,例如验证功能、测试用户界面、模拟用户交互
-
大大提高测试效率,减少手动测试的工作量。
-
-
网络爬虫
-
Selenium可以用于构建网络爬虫,从网页上提取数据。通过模拟用户的交互行为,如点击按钮、填写表单等
-
Selenium能够获取页面上动态生成的内容,而且可以处理JavaScript渲染的网页。
-
这对于需要爬取动态内容的网站很有帮助。
-
-
自动化操作
-
Selenium可以用于自动化各种Web应用程序的操作,例如批量提交表单、自动化下载文件、自动化填写信息等。
-
可以减少重复性的任务,并提高工作效率。
-
环境安装
谷歌浏览器版本
安装驱动
注意:大版本号要保持一致,否则可能出现兼容性问题(若找不到响应版本,降浏览器版本号)
-
https://registry.npmmirror.com/binary.html?path=chromedriver
-
https://googlechromelabs.github.io/chrome-for-testing/#stable
下载驱动
创建java工程
<!-- Selenium -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.10.0</version>
</dependency>
编写你的第一个demo
需要修改你的驱动路径
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class Main {
public static void main(String[] args) {
//指定驱动路径
System.setProperty("webdriver.chrome.driver","/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
webDriver.get("https://www.cnblogs.com/chenyanbin");
}
}
html元素定位实战
Selenium常见的元素定位方式概述
- 比较常用的是id选择器和xpath选择器
定位方法 | Java语言实现实例 |
---|---|
id 定位 | driver.findElement(By.id("id的值")); |
name定位 | driver.findElement(By.name("name的值")); |
链接的全部文字定位 | driver.findElement(By.linkText("链接里面的的全部文字")); |
链接的部分文字定位 | driver.findElement(By.partialLinkText("链接里面的部分文字")); |
css 方式定位 | driver.findElement(By.cssSelector("css表达式")); |
xpath 方式定位 | driver.findElement(By.xpath("xpath表达式")); |
Class 名称定位 | driver.findElement(By.className("class属性")); |
TagName 标签名称定位 | driver.findElement(By.tagName("标签名称")); |
拷贝元素的xpath路径
通过id定位元素
案例:搜索当前北京时间
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver","/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
webDriver.get("https://www.baidu.com/");
//测试id定位
idTest(webDriver);
}
/**
* 测试id定位元素
* @param webDriver
*/
public static void idTest(WebDriver webDriver) throws InterruptedException {
//睡眠2秒,让网站元素先加载完成
TimeUnit.SECONDS.sleep(2);
//利用ID定位到百度搜索的输入框
WebElement inputElement = webDriver.findElement(By.id("kw"));
//输入文字
inputElement.sendKeys("北京时间");
//睡眠一会
TimeUnit.MILLISECONDS.sleep(500);
//点击搜索功能
WebElement searchElement = webDriver.findElement(By.id("su"));
searchElement.click();
}
}
案例代码
通过xpath定位
-
XPath(XML Path Language)是一种在XML文档中查找信息的语言,也可以用于HTML
-
XPath提供了非常强大的定位能力,可以定位到几乎任何元素。
-
语法案例(更多语法搜索博文资料 https://www.w3school.com.cn/xpath/index.asp)
表达式 | 描述 | 实例 | 案例说明 |
---|---|---|---|
nodename | 选取nodename节点的所有子节点 | xpath('//div') | 选取了div节点的所有子节点 |
/ | 从根节点选取 | xpath('/div') | 从根节点上选取div节点 |
// | 选取所有的当前节点,不考虑他们的位置 | xpath('//div') | 选取所有的div节点 |
. | 选取当前节点 | xpath('./div') | 选取当前节点下的div节点 |
.. | 选取当前节点的父节点 | xpath('..') | 回到上一个节点 |
@ | 选取属性 | xpath('//@class') | 选取所有的class属性 |
-
HTML文档本身就是一个标准的XML页面,可以使用Xpath 的用法来定位页面元素
-
有两种路径定位方式
-
绝对路径
-
以 "/" 开头, 让xpath 从文档的根节点开始解析
-
如果页面结构发生改变,改路径也随之失效,必须重新配置
-
-
相对路径
-
以"//" 开头, 让xpath 从文档的任何元素节点开始解析
-
推荐采用这个方式,结合适合的元素,则通用性更好
-
-
-
注意事项
- webdriver会将整个页面的元素扫描定位所需要的元素,如果大量使用xpath做元素定位的话, 脚本的执行速度可能会稍慢
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver","/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
xpathTest(webDriver);
}
/**
* 通过xpath定位元素
* @param webDriver
* @throws InterruptedException
*/
public static void xpathTest(WebDriver webDriver) throws InterruptedException {
//睡眠2秒,让网站元素先加载完成
TimeUnit.SECONDS.sleep(2);
//利用ID定位到百度搜索的输入框
WebElement inputElement = webDriver.findElement(By.xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input"));
//输入文字
inputElement.sendKeys("北京时间");
//睡眠一会
TimeUnit.MILLISECONDS.sleep(500);
//点击搜索功能
WebElement searchElement = webDriver.findElement(By.xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input"));
searchElement.click();
}
基础知识
什么是WebDriver
-
Selenium WebDriver是一个浏览器自动化框架,允许执行Web应用程序上的操作,就如同一个真实用户一样。
-
在Selenium 4.x版本中,WebDriver API提供了一系列与浏览器进行交互的方法,常见API如下
方法 | 描述 |
---|---|
get(String url) | 访问目标 url 地址,打开网页 |
getCurrentUrl() | 获取当前页面 url 地址 |
getTitle() | 获取页面标题 |
getPageSource() | 获取页面源代码 |
close() | 关闭浏览器当前打开的窗口 |
quit() | 关闭浏览器所有的窗口 |
findElement(by) | 查找单个元素 |
findElements(by) | 查到元素列表,返回一个集合 |
getWindowHandle() | 获取当前窗口句柄 |
getWindowHandles() | 获取所有窗口的句柄 |
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver","/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
// webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
// xpathTest(webDriver);
webdriverTest(webDriver);
}
public static void webdriverTest(WebDriver webDriver) throws InterruptedException{
//访问目标 url 地址,打开网页
webDriver.get("https://www.baidu.com/");
//getCurrentUrl() 方法获取当前页面的 url 地址
String currentUrl = webDriver.getCurrentUrl();
System.out.println("当前页面的 url 地址是:" + currentUrl);
//getTitle() 方法获取当前页面的标题
String title = webDriver.getTitle();
System.out.println("当前页面的标题是:" + title);
//getPageSource() 方法获取当前页面的源码
String pageSource = webDriver.getPageSource();
System.out.println("当前页面的源码是:" + pageSource);
//通过 id 定位元素,并输入搜索关键词
webDriver.findElement(By.id("kw")).sendKeys("北京时间");
//findElements() 方法返回所有匹配的元素
// webDriver.findElements(By.id("kw")).get(0).sendKeys("北京时间");
String windowHandle = webDriver.getWindowHandle();
System.out.println("当前窗口句柄是:" + windowHandle);
Set<String> windowHandles = webDriver.getWindowHandles();
for (String wh : windowHandles) {
System.out.println("当前窗口句柄是:" + wh);
}
TimeUnit.SECONDS.sleep(5);
//close() 方法关闭当前页面
webDriver.close();
//quit() 方法关闭所有浏览器
// webDriver.quit();
}
什么是WebElement对象
-
WebElement
是 Selenium WebDriver API 中的一个核心接口, -
代表了DOM(Document Object Model)树中的一个HTML元素。
-
通过
WebElement
对象,可以与页面上的元素进行交互,例如点击按钮、输入文本、选择选项、检查元素的属性或状态等。 -
通常会通过 WebDriver 的
find_element_by_*
或find_elements_by_*
方法来定位页面上的元素,获取WebElement
对象。 -
这些方法会返回一个或多个
WebElement
对象,对象代表了与给定选择器匹配的DOM元素。
方法 | 说明 |
---|---|
click | 点击对象 |
sendKeys | 在对象上模拟按键输入 |
clear | 清除对象输入的文本内容 |
submit | 提交,比如表单对象 |
getAttribute | 获取元素的指定属性 |
getText | 用于获取元素的文本信息 |
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver","/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
// webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
// xpathTest(webDriver);
// webdriverTest(webDriver);
webEleTest(webDriver);
}
public static void webEleTest(WebDriver webDriver)throws InterruptedException {
//启动需要打开的网页
webDriver.get("https://www.baidu.com");
String title = webDriver.getTitle();
String currentUrl = webDriver.getCurrentUrl();
System.out.println("title="+title+",currentUrl="+currentUrl);
TimeUnit.SECONDS.sleep(2);
//输入元素 sendKey
webDriver.findElement(By.id("kw")).sendKeys("华为手机");
TimeUnit.SECONDS.sleep(2);
//清除元素 clear
webDriver.findElement(By.id("kw")).clear();
TimeUnit.SECONDS.sleep(2);
webDriver.findElement(By.id("kw")).sendKeys("苹果手机");
//点击元素 click
webDriver.findElement(By.id("su")).click();
TimeUnit.SECONDS.sleep(2);
webDriver.findElement(By.id("kw")).clear();
webDriver.findElement(By.id("kw")).sendKeys("苹果手机最新款");
//提交元素 submit
webDriver.findElement(By.id("su")).submit();
String text = webDriver.findElement(By.id("su")).getAttribute("value");
System.out.println("text======"+text);
}
自动化操作里面的浏览器API案例实战
-
需求
-
浏览器操作网页,有前进、后退,不同网页直接切换,窗口最大化、刷新等
-
通过Selenium的api完成上述的操作案例
-
方法 | 说明 |
---|---|
back | 模拟浏览器后退按钮 |
forward | 模拟浏览器前进按钮 |
refresh | 刷新页面(F5) |
maximize | 浏览器最大化 |
setSize | 浏览器宽高 |
manage( ).window( ).setSize( ) | 设置浏览器的大小 |
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver","/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
// webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
// xpathTest(webDriver);
// webdriverTest(webDriver);
// webEleTest(webDriver);
browserTest(webDriver);
}
public static void browserTest(WebDriver webDriver)throws InterruptedException {
//启动需要打开的网页
webDriver.get("https://www.baidu.com");
TimeUnit.SECONDS.sleep(2);
//输入
webDriver.findElement(By.id("kw")).sendKeys("北京时间");
TimeUnit.SECONDS.sleep(2);
//点击搜索
webDriver.findElement(By.id("su")).click();
//浏览器刷新
TimeUnit.SECONDS.sleep(2);
webDriver.navigate().refresh();
//浏览器后退一步
TimeUnit.SECONDS.sleep(2);
//加个休眠时间
webDriver.navigate().back();
//浏览器前进
TimeUnit.SECONDS.sleep(2);
webDriver.navigate().forward();
TimeUnit.SECONDS.sleep(2);
//浏览器窗口按照指定大小来显示
webDriver.manage().window().setSize(new Dimension(300,300));
TimeUnit.SECONDS.sleep(2);
//浏览器全屏
webDriver.manage().window().fullscreen();
}
Selenium的鼠标事件
-
鼠标操作主要是通过
Actions
类来实现的,该类提供了一系列模拟鼠标操作的方法 -
包括有 右击、双击、悬停、拖动等
方法 | 说明 |
---|---|
contextClick( ) | 右击 |
clickAndHold( ) | 鼠标点击并控制 |
doubleClick( ) | 双击 |
dragAndDrop( ) | 拖动 |
release( ) | 释放鼠标 |
perform( ) | 执行所有Actions中存储的行为 |
- 单击操作
WebElement element = driver.findElement(By.id("element_id")); // 替换为你要单击的元素的ID
element.click(); // 或者使用 Actions 实现单击
// 使用 ActionChains
Actions actions = new Actions(driver);
actions.click(element).perform();
- 双击操作
WebElement element = driver.findElement(By.id("element_id")); // 替换为你要双击的元素的ID
new Actions(driver).doubleClick(element).perform();
- 右键操作
WebElement element = driver.findElement(By.id("element_id")); // 替换为你要右击的元素的ID
new Actions(driver).contextClick(element).perform();
- 悬停操作
WebElement element = driver.findElement(By.id("element_id")); // 替换为你要悬停的元素的ID
new Actions(driver).moveToElement(element).perform();
- 拖拽操作
WebElement sourceElement = driver.findElement(By.id("source_id")); // 源元素ID
WebElement targetElement = driver.findElement(By.id("target_id")); // 目标元素ID
new Actions(driver).dragAndDrop(sourceElement, targetElement).perform();
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver", "/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
// webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
// xpathTest(webDriver);
// webdriverTest(webDriver);
// webEleTest(webDriver);
// browserTest(webDriver);
mouseTest(webDriver);
}
public static void mouseTest(WebDriver webDriver) throws InterruptedException {
//启动需要打开的网页
webDriver.get("https://www.baidu.com");
TimeUnit.SECONDS.sleep(2);
//输入
webDriver.findElement(By.id("kw")).sendKeys("北京时间");
TimeUnit.SECONDS.sleep(2);
//点击搜索
webDriver.findElement(By.id("su")).click();
TimeUnit.SECONDS.sleep(3);
//右键操作
WebElement element = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-wenku_GwhrW.s-tab-wenku"));
new Actions(webDriver).contextClick(element).perform();
}
模拟键盘操作
-
利用
Actions
和Keys
类来模拟键盘操作,包括文本输入、按键和组合键序列,增强自动化脚本的用户交互能力 -
Keys
枚举提供了方便的表示键盘上按键的方法,而Actions
类则用于构建复杂的交互序列。 -
这两者结合,允许在Web自动测试中模拟几乎任何类型的键盘操作。
-
键盘操作示例
-
发送普通文本
-
可以使用
WebElement
的sendKeys()
方法来向页面元素发送普通文本。 -
例如,向一个输入框发送文本"Hello, Selenium!":
-
-
WebElement inputBox = driver.findElement(By.id("inputBoxId"));
inputBox.sendKeys("Hello, Selenium!");
-
- 发送特殊字符
- sendKeys 使用
Keys
类中的常量,可以发送特殊字符或按键事件,sendKeys接收可变参数
- sendKeys 使用
- 发送特殊字符
sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)、sendKeys(Keys.SPACE) 空格键 (Space)
sendKeys(Keys.TAB) 制表键 (Tab)、sendKeys(Keys.ESCAPE) 回退键(Esc)
sendKeys(Keys.ENTER) 回车键(Enter)、sendKeys(Keys.F1) 键盘 F1
sendKeys(Keys.CONTROL,'a') 全选(Ctrl+A)、sendKeys(Keys.CONTROL,'c') 复制(Ctrl+C)
sendKeys(Keys.CONTROL,'x') 剪切(Ctrl+X)、sendKeys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
-
- 例如,发送回车键:
WebElement button = driver.findElement(By.id("buttonId"));
button.sendKeys(Keys.ENTER);
-
- 模拟组合键操作
-
Selenium还支持模拟组合键操作,如Ctrl+C、Alt+F4等。
-
这需要使用
Actions
类来构建一系列动作,并通过perform()
方法执行。
-
- 模拟组合键操作
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL); //按下 Ctrl 键
action.keyUp(Keys.CONTROL); //释放 Ctrl 键
-
-
- 使用快捷键Ctrl+Alt+a,可以通过下面语句来实现:
-
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).keyDown(Keys.ALT)
.sendKeys("a").keyUp(Keys.CONTROL).keyUp(Keys.ALT).perform();
-
-
- keyDown(Key)方法的调用,如没有接着调用keyUp(Key)或者sendKeys(Keys.NULL) 来释放,按键将一样保持按住状态
-
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver", "/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
// webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
// xpathTest(webDriver);
// webdriverTest(webDriver);
// webEleTest(webDriver);
// browserTest(webDriver);
// mouseTest(webDriver);
keyboardTest(webDriver);
}
public static void keyboardTest(WebDriver webDriver) throws InterruptedException {
//启动需要打开的网页
webDriver.get("https://www.baidu.com");
TimeUnit.SECONDS.sleep(2);
//输入
WebElement kw = webDriver.findElement(By.id("kw"));
kw.sendKeys("北京时间");
TimeUnit.SECONDS.sleep(2);
//删除一个字符
kw.sendKeys(Keys.BACK_SPACE);
kw.sendKeys(Keys.BACK_SPACE);
TimeUnit.SECONDS.sleep(2);
kw.sendKeys("故宫");
//点击搜索
webDriver.findElement(By.id("su")).click();
TimeUnit.SECONDS.sleep(3);
}
-
注意事项
-
在发送键盘操作之前,请确保目标元素是可交互的(即可见且可点击)。
-
如果元素在发送键盘操作之前处于隐藏或不可交互状态,可能会导致测试失败。
-
在使用组合键时,请注意按键的顺序和释放的顺序,如果顺序不正确,可能会导致测试行为不符合预期。
-
-
不同操作系统的键盘说明
windows:
send_keys(Keys.CONTROL, 'a') 方法用于全选文本,
send_keys(Keys.CONTROL, 'c') 方法用于复制文本,
send_keys(Keys.CONTROL, 'x') 方法用于剪切文本,
send_keys(Keys.CONTROL, 'v') 方法用于粘贴文本。
mac:
send_keys(Keys.COMMAND, 'a') 方法用于全选文本,
send_keys(Keys.COMMAND, 'c') 方法用于复制文本,
send_keys(Keys.COMMAND, 'x') 方法用于剪切文本,
send_keys(Keys.COMMAND, 'v') 方法用于粘贴文本。
显示等待和隐式等待
-
Web应用通常通过异步加载(如Ajax)来动态更新页面内容,页面元素可能不是立即可用的。
-
当自动化测试脚本尝试访问或操作这些元素时,如果没有等待机制,可能会遇到定位失败、元素状态不正确等异常
-
Selenium4等待主要解决以下问题:
-
元素加载延迟
-
当页面上的某些元素是通过异步请求(如Ajax)加载的,这些元素可能不会立即出现在DOM中。
-
网络波动或服务器响应延迟,页面上的某些内容可能需要一些时间才能加载。
-
如果没有等待机制,测试脚本可能会在元素实际可用之前访问它,导致定位失败。
-
-
依赖关系:
-
测试脚本中的操作可能依赖于前一步的结果或内容。
-
例如,一个表单提交后,可能需要等待新页面加载完成才能继续执行后续操作。
-
-
页面更新:
-
JavaScript可能会动态更改页面内容,如添加、删除或修改元素。
-
如果没有等待,测试脚本可能会错过这些变化,导致测试失败。
-
-
-
Selenium 等待元素出现的方式有以下三种
-
强制等待
-
即线程休眠,在代码中强制当前正在执行的线程休眠(暂停执行)不管元素有没出现都固定时间
-
前面案例操作中已经多次使用
TimeUnit.SECONDS.sleep(2);
-
-
显式等待(Explicit Wait)
-
通俗说就是死等,不灵活的等待,在指定的时间内一定要等到某个元素的出现或可操作的状态
-
如果等不到,就一直等,直到在规定的时间之内都要操作的元素仍没找到,就抛出异常
-
可以针对特定的元素或一组元素进行等待,提供了更灵活的等待机制,可以等待复杂的条件。
-
-
隐式等待 (Implicit Wait)
-
设置全局等待时间,全部查找都会生效,驱动初始化后就可以配置,在指定时间内轮询DOM,直到找到元素或超时。
-
一旦设置,在整个WebDriver对象实例的生命周期内都有效。
-
适用于等待整个页面加载完毕。
-
-
public static void main(String[] args) throws InterruptedException {
//指定驱动路径
System.setProperty("webdriver.chrome.driver", "/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
// 启动需要打开的网页
// webDriver.get("https://www.baidu.com/");
//测试id定位
// idTest(webDriver);
// xpathTest(webDriver);
// webdriverTest(webDriver);
// webEleTest(webDriver);
// browserTest(webDriver);
// mouseTest(webDriver);
// keyboardTest(webDriver);
waitTest(webDriver);
}
public static void waitTest(WebDriver webDriver)throws InterruptedException {
//启动需要打开的网页
webDriver.get("https://www.baidu.com");
// >>>>>>>方式一
// // 创建显式等待对象,设置最大等待时间为10秒
// WebDriverWait wait = new WebDriverWait(webDriver, Duration.ofSeconds(5));
// // 使用ExpectedConditions定义等待条件,例如元素可见性
// wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw")));
// >>>>>>>方式二
//隐式等待,可以用一个不存在的元素位置进行测试
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
//输入元素 sendKey
webDriver.findElement(By.id("kw")).sendKeys("北京时间");
//提交元素 submit
webDriver.findElement(By.id("su")).submit();
String text = webDriver.findElement(By.id("su")).getAttribute("value");
System.out.println("text======"+text);
}
谷歌插件【重要】
实际工作中,可以使用谷歌一款录屏插件,直接稍微修改下代码即可使用自动化操作
插件名称:Selenium IDE
示例
录制脚本
导出java自动化脚本
// 指定驱动
//指定驱动路径
System.setProperty("webdriver.chrome.driver", "/Users/alex/Desktop/chromedriver-mac-x64/chromedriver");
// 谷歌驱动
ChromeOptions options = new ChromeOptions();
// 允许所有请求
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);