为什么要学习Selenium

  • 自动化测试

    • Selenium是最受欢迎的Web应用程序自动化测试工具之一。

    • 通过学习Selenium,可以编写自动化测试脚本,用于自动执行各种任务,例如验证功能、测试用户界面、模拟用户交互

    • 大大提高测试效率,减少手动测试的工作量。

  • 网络爬虫

    • Selenium可以用于构建网络爬虫,从网页上提取数据。通过模拟用户的交互行为,如点击按钮、填写表单等

    • Selenium能够获取页面上动态生成的内容,而且可以处理JavaScript渲染的网页。

    • 这对于需要爬取动态内容的网站很有帮助。

  • 自动化操作

    • Selenium可以用于自动化各种Web应用程序的操作,例如批量提交表单、自动化下载文件、自动化填写信息等。

    • 可以减少重复性的任务,并提高工作效率。

环境安装

谷歌浏览器版本

安装驱动

  注意:大版本号要保持一致,否则可能出现兼容性问题(若找不到响应版本,降浏览器版本号)

下载驱动

创建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();
}

模拟键盘操作

  • 利用ActionsKeys类来模拟键盘操作,包括文本输入、按键和组合键序列,增强自动化脚本的用户交互能力

  • Keys枚举提供了方便的表示键盘上按键的方法,而Actions类则用于构建复杂的交互序列。

  • 这两者结合,允许在Web自动测试中模拟几乎任何类型的键盘操作。

  • 键盘操作示例

    • 发送普通文本

      • 可以使用WebElementsendKeys()方法来向页面元素发送普通文本。

      • 例如,向一个输入框发送文本“Hello, Selenium!”:

WebElement inputBox = driver.findElement(By.id("inputBoxId"));
inputBox.sendKeys("Hello, Selenium!");
    • 发送特殊字符

      • sendKeys 使用Keys类中的常量,可以发送特殊字符或按键事件,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);

WebUi爬虫自动化测试 Selenium4.X+Java教程的更多相关文章

  1. selenium2 Webdriver + Java 自动化测试实战和完全教程

    selenium2 Webdriver + Java 自动化测试实战和完全教程一.快速开始 博客分类: Selenium-webdriverselenium webdriver 学习selenium ...

  2. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  3. JAVA 教程推荐

    JAVA 教程 学习地址:http://www.manongjc.com/mysql/mysql_tutorial.html Java 简介 Java是由Sun Microsystems公司于1995 ...

  4. Java教程-Java 程序员们值得一看的好书推荐

    学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资 ...

  5. Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  6. 学习笔记|Java 教程|菜鸟教程

    一.Java 教程 1.Java 教程 Java 在线工具 JDK 1.6 在线中文手册 我的第一个 JAVA 程序 创建文件 HelloWorld.java(文件名需与类名一致), 代码如下: pu ...

  7. Java-Runoob:Java 教程

    ylbtech-Java-Runoob:Java 教程 1.返回顶部 1. Java 教程 Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言. Java可运行于 ...

  8. 廖雪峰的java教程

    F:\教程\0-免费下载-廖雪峰 公司电脑地址: G:\学习中\廖雪峰的java教程 廖雪峰java课程地址: https://www.feiyangedu.com/category/JavaSE 0 ...

  9. java教程(五)SSH框架-配置

    前言:从这篇博客開始我将继续讲述Java教程:SSH篇.主要内容环绕SSH框架分析与搭建,今天先简介一下SSH的配置. SSH配置顺序是: spring-->hibernate-->str ...

  10. Github上可以涨薪30k的Java教程和实战项目终于可以免费下载了

    写在前面 大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架.软件或者教程.这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整 ...

随机推荐

  1. Linux系统中如何部署php

    1. 在线安装 Apache 服务器 ubuntu 可通过"apt"等命令在线安装,centos用yum. # ubuntu sudo apt-get install apache ...

  2. vue3的reactive对象赋值后失去响应式的问题

    vue3种对象类型的响应式用reactive实现. 但是reactive对象在赋值后,因为变量代理函数变了,就失去了响应式功能了.示例如下: <template> <div> ...

  3. 定了!AIRIOT新品发布会,6月6日北京见。

    随着物联网.大数据.AI技术的成熟和演进,智能物联网技术正在加速.深入渗透至各行业应用. AIRIOT物联网平台作为赋能数字经济发展和产业转型的数字基座,由航天科技控股集团股份有限公司(股票代码:00 ...

  4. PyQt5 GUI编程(组件使用)

    一.简介 PyQt5 是一个用于创建图形用户界面(GUI)应用程序的 Python 绑定,它基于 Qt 库.PyQt5 提供了大量的组件(也称为控件或部件),用于构建复杂的用户界面.以下是一些常用的 ...

  5. .NET 9 预览版:打造云原生及人工智能 AI 平台

    前言 微软发布了 .NET 9 首个预览版,分享.NET团队对 .NET 9 的初步愿景,该愿景将于今年年底在 .NET Conf 2024 上发布. 重点关注针对云原生和人工智能领域的应用程序开发以 ...

  6. vue绑定对象,绑定的值不改变的问题

    在使用vue结合elmentui的table组件,对数组绑定,需要编辑数组里一些属性的值.我的情况是,需要在打开这个表时,根据条件插入一些对象到table里,经测试,到这里是没问题的,可以显示新插入的 ...

  7. 使用IDEA导入MyBatis源码进行调试

    一. 下载源码 GitHub地址:https://github.com/mybatis/mybatis-3 复制上面的地址执行下列命令: git clone https://github.com/my ...

  8. NOIP模拟54

    我觉得,不改变也很好. 前言 这题太难了,场上竟然无人切题..(听说别的学校切题的人不少.. T1 选择 解题思路 范围比较小,并且每个边的度也比较小,因此考虑 树形DP+状压 . 大概就是对于每一个 ...

  9. 如果设备不支持vulkan,就用swiftshader,否则就加载系统的vulkan的正确姿势(让程序能够智能的在vulkan-1.dll和libvk_swiftshader.dll之间切换)

    一些老的显卡设备没有更新驱动,甚至根本就不支持Vulkan的显卡,遇到静态链接的vulkan-1.lib文件,启动exe就会崩溃. 你以为从别的机器拷贝这个vulkan-1.dll就可以了吗? 太傻太 ...

  10. ETL工具-nifi干货系列 第七讲 处理器JoltTransformJSON(续)

    第六讲教程只简单介绍了Jolt的chain转换模式,本节课介绍下Jolt的各种转换模式. 点击的处理器JoltTransformJSON高级配置选项,进行测试Jolt的转换模式. 1.Cardinal ...