当前位置: 首页 > news >正文

九、自动化函数02

// 进阶版本的屏幕截图
void getScreenShot(String str) throws IOException {//     ./src/test/image/ 存放图片路径// 屏幕截图SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmss");String dirTime = sim1.format(System.currentTimeMillis());String fileName = sim2.format(System.currentTimeMillis());String filename = "./src/test/image/" + dirTime + "/" + str + "-" + fileName + ".png";System.out.println("filename:" + filename);File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);// srcFile放到指定位置FileUtils.copyFile(srcFile, new File(filename));driver.findElement(By.cssSelector("#headline-tabs > ul"));driver.quit();
}
void test04() {createDriver();try {// 打开百度首页driver.get("https://www.baidu.com");System.out.println("已打开百度首页:" + driver.getTitle());// 显式等待页面加载完成WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));// 点击“新闻”链接WebElement newsLink = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#s-top-left > a:nth-child(1)")));newsLink.click();
//            System.out.println("已点击新闻链接");// 获取当前窗口句柄String curHandle = driver.getWindowHandle();
//            System.out.println("当前窗口句柄为:" + curHandle);
//            System.out.println("===============================================");// 获取所有窗口句柄并切换到新窗口Set<String> allHandles = driver.getWindowHandles();for (String handle : allHandles) {if (handle != curHandle) {driver.switchTo().window(handle);// 显式等待目标元素加载完成
//                    WebElement headlineTabs = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#headline-tabs > ul")));
//                    System.out.println("找到目标元素:" + headlineTabs.getText());}}/*for (String handle : allHandles) {if (!handle.equals(curHandle)) { // 使用 equals() 比较字符串driver.switchTo().window(handle);System.out.println("跳转之后:" + driver.getTitle());// 显式等待目标元素加载完成WebElement headlineTabs = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#headline-tabs > ul")));System.out.println("找到目标元素:" + headlineTabs.getText());break; // 切换到新窗口后退出循环}}*/// 屏幕截图
//            File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);// srcFile放到指定位置
//            FileUtils.copyFile(srcFile, new File("my.png"));getScreenShot(getClass().getName());driver.findElement(By.cssSelector("#headline-tabs > ul"));driver.quit();} catch (Exception e) {e.printStackTrace();} finally {// 关闭浏览器if (driver != null) {driver.quit();}}}

测试打开的新的标签页之后还要继续返回到前一个标签页中进行测试。

#\31 > div > div > div > div > div > div.new-tag_4ozgi.new-text-link_3k9GD > div > div.flex-wrapper-top_3ucFS > div.flex-col-left_3trtY.baike-wrapper_6AORN.cu-pt-xs-lg.baike-wrapper-pc_26R04.cu-pt-xl.baike-wrapper-left-pc_5eYY8.cos-space-pb-sm > div > div > p > span:nth-child(1) > span

driver.findElement(By.cssSelector("#\\31  > div > div > div > div > div > div.new-tag_4ozgi.new-text-link_3k9GD > div > div.flex-wrapper-top_3ucFS > div.flex-col-left_3trtY.baike-wrapper_6AORN.cu-pt-xs-lg.baike-wrapper-pc_26R04.cu-pt-xl.baike-wrapper-left-pc_5eYY8.cos-space-pb-sm > div > div > p > span:nth-child(1) > span"));

选择器复制好直接粘贴到这里,不要再手动去修改

隐式等待:implicitlyWait() 参数:Duration类中提供的毫秒、秒、分钟等方法

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));// 设置等待时间

两种情况:在3秒内找到元素继续执行

在3S内没有找到元素–报错NoSuchElement

搜索迪丽热巴,百度百科

void test05() throws InterruptedException {createDriver();try {driver.get("https://www.baidu.com");driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");driver.findElement(By.cssSelector("#su")).click();Thread.sleep(3000);driver.findElement(By.cssSelector("#\\31  > div > div > div > div > div > div.new-tag_4ozgi.new-text-link_3k9GD > div > div.flex-wrapper-top_3ucFS > div.flex-col-left_3trtY.baike-wrapper_6AORN.cu-pt-xs-lg.baike-wrapper-pc_26R04.cu-pt-xl.baike-wrapper-left-pc_5eYY8.cos-space-pb-sm > div > div > p > span:nth-child(1) > span"));
//        driver.findElement(By.xpath("//*[@id=\"1\"]/div/div/div/div/div/div[2]/div/div[1]/div[1]/div/div/p/span[1]/span"));driver.quit();} catch (Exception e) {e.printStackTrace();} finally {// 关闭浏览器driver.quit();}}

隐式等待,只有在查找元素的时候,在指定时间内查找元素

问题:先搜索迪丽热巴,在搜索邓紫棋,输出邓紫棋的名字

实际结果:输出的是“迪丽热巴”

预期结果:输出的是“邓紫棋”

问题原因:implicitWait只用来查找元素是否存在

解决办法:在查找“邓紫棋”关键词之前等待三秒,在这三秒里,clear、sendkeys、click操作+页面渲染肯定能完成(Thread.sleep(3000))


显示等待

显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码。

elementToBeClickable(By locator) - 用于检查元素的期望是可见的并已启用,以便您可以单击它。

testToBe(Bylocator,String str) - 检查元素。(精确匹配)

presenceOfElementLocated(Bylocator) - 检查页面的DOM上是否存在元素。

urlToBe(java.lang.String url) - 检查当前页面的URL是一个特定的URL。

显示等待只作用在当前的条件上

若在超时间内为满足条件,则报错超时

隐式等待和显示等待一起使用效果如何呢?

结果:重试多次,最终打印的等待时间有10s、11s…

结论:注意混合隐式和显式等待,可能会导致不可预测的等待时间。

浏览器导航

常见操作:

1)打开网站

1 // 更长的方法

driver.navigate().to(“https://selenium.dev”);

// 简洁的方法

driver.get(“https://selenium.dev”);

2) 浏览器的前进、后退、刷新

driver.navigate().back();

driver.navigate().forward();

driver.navigate().refresh();

分别对应前进,后退、刷新的操作

弹窗

相关文章:

  • sprintf函数
  • 企业应如何防范 AI 驱动的网络安全威胁?
  • WAF防火墙:构筑Web应用安全的“隐形护盾”
  • emotn ui桌面tv版官网-emotn ui桌面使用教程
  • 通信算法之265: 无人机系统中的C2链路
  • 前端 -- uni-app 的 splitChunks 分包详解与实战!
  • 图像预处理-色彩空间补充,灰度化与二值化
  • 如何在不同版本的 Elasticsearch 之间以及集群之间迁移数据
  • Android ExifInterface rotationDegrees图旋转角度,Kotlin
  • 基于 PyTorch 的 LSTM 实现降雨量预测
  • 使用RUN pip install flask和RUN pip install -r requirements.txt
  • 【rdma通信名词概念】
  • 鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别
  • 前端快速入门——JavaScript函数、DOM
  • Spring MVC 模型数据绑定:addAttribute 与 put 方法详解
  • 【区块链+ 人才服务】“CERX Network”——基于 FISCO BCOS 的研学资源交换网络 | FISCO BCOS 应用案例
  • ESLint常见错误
  • 使用CS Roofline Toolkit测量带宽
  • 一文读懂WPF系列之MVVM
  • 秒杀秒抢系统开发:飞算 JavaAI 工具如何应对高并发难题?
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列
  • 投资者建议发行优惠套票给“被套”小股东,张家界:将研究考虑
  • 马上评丨上热搜的协和“4+4”模式,如何面对舆论审视
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 神十九飞船已撤离空间站,计划于今日中午返回东风着陆场
  • 解读|特朗普“助攻”下加拿大自由党“惨胜”,卡尼仍需克服“特鲁多阴影”