网站备案怎样提交管局,网站建设优化石家庄,改 wordpress 主题 颜色,宣城网站seo诊断目录 引言
打开页面
查找页面元素 输入文本
点击操作
提交操作
清除文本
获取文本和属性值
编辑
选择多个元素
获取页面标题和URL
等待操作
浏览器操作
多层框架定位
窗口操作
屏幕截图
下拉框元素选择操作
编辑
执行脚本
文件上传 引言 本文讲的所有…目录 引言
打开页面
查找页面元素 输入文本
点击操作
提交操作
清除文本
获取文本和属性值
编辑
选择多个元素
获取页面标题和URL
等待操作
浏览器操作
多层框架定位
窗口操作
屏幕截图
下拉框元素选择操作
编辑
执行脚本
文件上传 引言 本文讲的所有API均基于谷歌浏览器驱动即 ChromeDriver 类中的 API WebDriver webDriver new ChromeDriver(); 打开页面 webDriver.get(https://www.baidu.com); 在 get 方法中输入想打开的网址即可打开该网址页面 查找页面元素 // 找到百度搜索输入框
// 这是通过 CSS 选择器进行选择WebElement element webDriver.findElement(By.cssSelector(.s_ipt));
// 这是通过 xpath 选择器进行选择WebElement element webDriver.findElement(By.xpath(//*[id\kw\])); CSS 选择语法(效率比 xpath 高) id选择器#id By.cssSelector(#kw) 类选择器.class By.cssSelector(.s_ipt) 标签选择器标签名 By.cssSelector(input) 后代选择器父级选择器 子级选择器 By.cssSelector(form input) XPath 选择语法 绝对路径(不常用) By.xpath(/html/head/title) 相对路径 相对路径索引 By.xpath(//form/span[1]/input) 相对路径属性值 By.xpath(//input[classs_ipt]) 相对路径通配符 By.xpath(//*[idsu]) 注意 * 符号 代表通配符 该示例表示任何一个标签其属性值 id 为 su 就会被选中 相对路径文本匹配 By.xpath(//a[text()新闻]) 简捷方法 通过在浏览器页面 按 F12 进行下面操作直接获取到任意标签的 CSS 路径、XPath 路径 输入文本 // 找到百度搜索输入框
// 这是通过 Css 选择器进行选择
// WebElement element webDriver.findElement(By.cssSelector(.s_ipt));
// 这是通过 xpath 选择器进行选择WebElement element webDriver.findElement(By.xpath(//*[id\kw\]));
// 在搜索框中输入element.sendKeys(不孕不育); sendKeys 方法可对你选中的元素进行输入文本但是仅适用于文本文字和内容可以编辑的元素 点击操作 // 找到百度一下按钮 并 点击webDriver.findElement(By.cssSelector(#su)).click(); 定位到选中元素使用 click 方法 即为鼠标的点击操作 提交操作 // 点击百度一下按钮webDriver.findElement(By.cssSelector(#su)).submit(); 定位到选中元素使用 submit 方法 即为按下 Enter 键效果一样不推荐使用 submit 方法click 方法能完全代替 submit 方法 注意 选中元素在 from 标签中使用 submit 方法 实现的效果和 click 方法 是一样的选中元素放在 非 from 标签中使用 submit() 会报错 清除文本 // 清空百度搜索输入框中的数据webDriver.findElement(By.cssSelector(#kw)).clear(); 定位到选中元素使用 clear 方法 即可清空其文本内容 获取文本和属性值 // 获取 选中标签的文本内容String text webDriver.findElement(By.cssSelector(#hotsearch-content-wrapper li:nth-child(3) a span.title-content-title)).getText(); 定位到选中元素使用 getText 方法 即可获取到该元素的文本内容 // 获取 属性名为 value 的值String button_value webDriver.findElement(By.cssSelector(#su)).getAttribute(value); 定位到选中元素使用 getAttribute 方法 即可获取到该元素 相应属性名 的值除了 value 属性值 也可获取 id 属性值、class 属性值、type 属性值 等等 选择多个元素 示例自动选择 checkbox 类型的元素 ListWebElement webElements webDriver.findElements(By.cssSelector(input));for (int i 0; i webElements.size(); i) {
// 如果每个元素 type 值等于 checkbox 进行点击if(webElements.get(i).getAttribute(type).equals(checkbox)){webElements.get(i).click();}} 使用 findElements 方法 获取到标签为 input 的元素集合 获取页面标题和URL // 打开百度首页webDriver.get(https://www.baidu.com);
// 获取 get 方法所打开页面的 URLString url webDriver.getCurrentUrl();
// 获取 get 方法所打开页面 标签为 title 的值String title webDriver.getTitle(); 使用 getCurrentUrl 方法 即可获取 get 方法打开页面的 URL 值使用 getTitle 方法 即可获取 get 方法打开页面标签为 title 的值 等待操作 引言 程序执行速度远快于浏览器渲染速度当自动化打开某一页面且需要选中该页面某一元素时情况1在选择元素时页面渲染完成成功选中该元素情况2在选中元素时页面还未完全渲染被选中元素还未加载出来此时选择该元素时便会报错为了避免 情况2 的发生我们可以引入等待操作 强制等待 // 这是强制等待 3秒sleep(3000); 当自动化程序代码执行到 sleep 方法时便会强制等待自定义时长继而执行后面代码 隐式等待 // 创建驱动WebDriver webDriver new ChromeDriver();
// 这是隐式等待 3天webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.DAYS);
// 打开百度首页webDriver.get(https://www.baidu.com);
// 在搜索框输入不孕不育 webDriver.findElement(By.cssSelector(#kw)).sendKeys(不孕不育);
// 点击百度一下webDriver.findElement(By.cssSelector(#su)).click();
// 退出webDriver.quit(); 隐式等待贯穿于 webDriver 的整个生命周期在自定义时间内反复判断元素是否存在直到元素能被找到便停止等待超出自定义时间还未找到便会报错TimeUnit.DAYS 代表时间单位 天 也有秒、小时、分钟等单位可自行选择 显式等待 // 显示等待 3秒WebDriverWait wait new WebDriverWait(webDriver,3000);
// 等待至该元素被选择才继续执行后面代码wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(#bottom_layer div p:nth-child(8))));
// 等待至是否可以判断该元素的 title 标签为 ”百度一下你就知道“ 才继续执行后面代码wait.until(ExpectedConditions.titleIs(百度一下你就知道)); 显式等待仅作用于某一条代码在自定义时间内判断 该条代码 元素是否存在直到元素能被找到便停止等待超出自定义时间还未找到便会报错使用 until 方法来自定义要进行显示等待的代码 浏览器操作 前进操作 // 浏览器前进webDriver.navigate().forward(); 后退操作 // 浏览器后退webDriver.navigate().back(); 刷新操作 // 浏览器刷新webDriver.navigate().refresh(); 多层框架定位 // 先进行框架的定位webDriver.switchTo().frame(f1);
// 再进行元素的选择webDriver.findElement(By.cssSelector(body div div a)).click(); 在含有多个框架的页面中我们必须要先对框架进行定位才能进行相应的元素选择 窗口操作 设置窗口大小 // 浏览器最大化webDriver.manage().window().maximize();
// 浏览器全屏webDriver.manage().window().fullscreen();
// 浏览器窗口设置指定大小 宽 , 高webDriver.manage().window().setSize(new Dimension(600,1000)); 窗口切换 操作窗口是指被 自动化代码 操作的窗口最初的操作窗口是使用 get 方法 打开的窗口在操作窗口中打开新窗口该新窗口不会变为操作窗口我们需用到窗口切换来切换我们的操作窗口使新窗口成为被 自动化代码 操作的窗口当浏览器每打开一个窗口时会自动给每个窗口进行标识也被称为 句柄句柄 是窗口切换操作的关键所在 // 通过 getWindowHandles 获取所有的窗口句柄
// 通过 getWindowHandle 获取 get 方法所打开的页面窗口句柄System.out.println(webDriver.getWindowHandle());SetString handles webDriver.getWindowHandles();String target_handle ;
// 这里的循环是为了获取到 新窗口 对应的句柄for (String handle:handles) {target_handle handle;System.out.println(target_handle target_handle);}webDriver.switchTo().window(target_handle); 屏幕截图 1.在 pom.xml 中引入相应依赖 !-- https://mvnrepository.com/artifact/commons-io/commons-io --dependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.11.0/version/dependency 2.截图操作代码 // 屏幕截图操作 OutputType.FILE 表示以文件的形式保存File file ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
// 把文件存入 自定义路径下 没输入路径时便是当前项目路径下FileUtils.copyFile(file,new File(E://20230826test.png)); 在保存截图的时候我们可以为文件名加入时间戳使得每次所得截图的文件名是动态的、不相同的从而可以避免程序多次生成的截图因文件同名而被覆盖在有弹窗的情况下使用截图会报错 // alert 弹窗取消webDriver.switchTo().alert().dismiss();
// alert 弹窗中加入小林webDriver.switchTo().alert().sendKeys(小林);
// alert 弹窗确定webDriver.switchTo().alert().accept(); 在提示弹窗进行输入文本的输入在页面上是看不到输入文本的执行效果 下拉框元素选择操作 WebElement element webDriver.findElement(By.cssSelector(#ShippingMethod));Select select new Select(element);
// 根据下标进行选择 下标从 0 开始select.selectByIndex(3);
// 直接根据值进行选择select.selectByValue(12.51); 先创建出一个 select 对象selectByIndex 方法为下标选择法selectByValue 方法为值选择法 执行脚本 // 浏览器滚动条滚动((JavascriptExecutor)webDriver).executeScript(document.documentElement.scrollTop10000); 先将 webDriver 转化为 JavascriptExecutor 类型再在 executeScript 方法填入 想执行的 JavaScript 代码从而进行相应的页面操作 文件上传 // 先选中 文件上传按钮 再进行上传文件 webDriver.findElement(By.cssSelector(input)).sendKeys(E:\\test.jpg); 在 sendKeys 方法中填入 想要上传文件的 绝对路径