首页 > 编程语言 >WebUi爬虫自动化测试 Selenium4.X+Java教程

WebUi爬虫自动化测试 Selenium4.X+Java教程

时间:2024-07-08 23:01:28浏览次数:12  
标签:webDriver Java 元素 driver Selenium4 findElement WebUi id sendKeys

为什么要学习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);

标签:webDriver,Java,元素,driver,Selenium4,findElement,WebUi,id,sendKeys
From: https://www.cnblogs.com/chenyanbin/p/18288029/selenium

相关文章

  • 【Javascript】微信小程序项目结构目录详解
    我白天是个搞笑废物表演不在乎夜晚变成忧伤怪物撕扯着孤独我曾经是个感性动物小心地感触现在变成无关人物                     ......
  • Java [ 基础 ] Java 8以上新特性 ✨
    ✨探索Java基础Java8以上新特性✨Java8及以上的新特性Java8引入了一些重大更新和新特性,这些特性极大地增强了Java的功能和性能。随着Java9、10、11、12及以后的版本发布,Java持续引入更多的改进和新功能。本文将介绍Java8及以上版本的一些关键新特性。Java8新特......
  • java---方法
    乐观学习,乐观生活,才能不断前进啊!!!我的主页:optimistic_chen我的专栏:c语言欢迎大家访问~创作不易,大佬们点赞鼓励下吧~前言在编程中,某段功能的代码可能会频繁的使用到,如果每次都重新实现一遍,那么程序效率低下,并且不利于维护,而且需要改动时,所有用到该代码的代码的位置都......
  • 【js面试题】深入理解尾递归及其在JavaScript中的应用
    面试题:举例说明尾递归的理解,以及应用场景引言:在编程中,递归是一种常见的解决问题的方法,它允许函数调用自身来解决问题。然而,递归如果不当使用,可能会导致栈溢出错误,特别是在处理大量数据时。尾递归是一种特殊的递归形式,它能够优化递归调用,避免栈溢出的问题。本文将深入探......
  • 软件设计之Java入门视频(13)
    软件设计之Java入门视频(13)视频教程来自B站尚硅谷:尚硅谷Java入门视频教程,宋红康java基础视频相关文件资料(百度网盘)提取密码:8op3idea下载可以关注软件管家公众号学习内容:该视频共分为1-717部分本次内容涉及360-389在写代码时,总是需要来回切换界面来看代码要求......
  • Java方法重写,匿名对象,抽象类
    1-方法重写什么是方法重写?子类和父类出现了一模一样的方法的声明(方法名,参数列表)为什么要学习方法重写?当子类需要使用父类的功能,但是父类的功能又满足不了子类,那么子类需要重写,这样既可以使用父类的功能,也可以增加新的功能如果进行方法重写?子......
  • JavaWeb__HTML&CSS
    目录一、HTML1、网页的组成部分2、HTML文件的书写规范3.HTML标签的介绍4、标签的语法5、常用标签介绍二、CSS1、CSS技术介绍2、CSS语法规则3、CSS和HTML的结合方式3.1、行内式3.2、内嵌式3.3、外部样式表4、CSS选择器4.1、标签名选择器4.2、id选择器4.3、class选择......
  • JavaScript总结2
    概述JavaScript是世界上最流行的脚本语言。JavaScript是一种轻量级的编程语言,可以插入HTML页面的编程代码。JavaScript插入HTML页面后,可由浏览器执行。特点语法简单,易学易用;解释性语言;跨平台,基于对象和事件驱动,可用于客户端。作用可以动态改变网页内容,网页外观;验证表......
  • Java面试八股之MySQL主从复制机制简述
    MySQL主从复制机制简述MySQL的主从复制机制是一种数据复制方案,用于在多个服务器之间同步数据。此机制允许从一个服务器(主服务器)到一个或多个其他服务器(从服务器)进行数据的复制,从而增强数据冗余、提高读取性能,并且为灾难恢复提供保障。以下是MySQL主从复制机制的简要概述:复制......
  • Maven工程下:alibaba fastjson2的各种序列化:java对象转json对象、json对象转java对象
    pom文件导入fastjson2坐标:<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.51</version></dependency>UserVO对象:@Data@AllArgsConstructor......