首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Selenium常用自动化函数

  • 25-02-16 07:40
  • 3891
  • 6363
blog.csdn.net

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

目录

1.元素的定位

1.1 定位步骤

1,要想定位,就先打开开发者工具

2,先点击左上角图标

1.2 cssSelector

1.3 xpath 

2.操作测试对象 

2.1 点击/提交对象

2.2 模拟按键输⼊

2.3 清除⽂本内容

2.4 获取⽂本信息

2.5 获取当前⻚⾯标题

2.6获取当前⻚⾯URL

3.窗⼝

3.1 窗⼝设置⼤⼩

3.2 窗⼝切换

3.3 屏幕截图

3.4关闭窗⼝

4、等待

4.1 强制等待

4.2 隐式等待

4.3 显⽰等待

优点:

缺点:

5.浏览器导航 

1,打开⽹站

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

6. 弹窗

6.1警告弹窗

6.2 确认弹窗

6.3 提⽰弹窗

7. ⽂件上传

8.浏览器参数设置

1.设置⽆头模式

2.设置浏览器加载策略


在自动化测试中,编写常用的函数可以提高代码的复用性和可维护性。以下是一些在自动化测试中常用的函数示例,这些函数涵盖了常见的操作,如启动浏览器、定位元素、点击、输入文本、等待、断言等

1.元素的定位

Web自动化测试的核心确实是能够准确找到页面上的元素,并在这些元素上执行操作。无论是点击按钮、输入文本、验证页面内容,还是执行其他交互,所有的操作都依赖于能够定位到这些元素

常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector

常⽤的主要由cssSelector和xpath

1.1 定位步骤

1,要想定位,就先打开开发者工具

方式有三种:

鼠标右键->检查

Ctrl键+shift键+i

F12

2,先点击左上角图标

再点击要找的对应元素,就会出现定位 

1.2 cssSelector

选择器的功能:选中⻚⾯中指定的标签元素

选择器的种类分为基础选择器和复合选择器,常⻅的元素定位⽅式可以通过id选择器和⼦类选择器来 进⾏定位

定位百度⾸⻚的“百度一下”元素,可以使⽤通过id选择器和⼦类选择器进⾏定位:"btn self-btn bg s_btn"

crtl+F搜索复制的selector ,就可以定位所在元素位置

1.3 xpath 

XPath(XML Path Language)是一种在XML和HTML文档中查找信息的语言,它使用路径表达式来选定文档中的节点

获取HTML⻚⾯所有的节点

//*

获取HTML⻚⾯指定的节点

//[指定节点]

获取⼀个节点中的直接⼦节点

/

获取⼀个节点的⽗节点

..

实现节点属性的匹配

[@...]

采用xpath方式来定位百度⾸⻚的“百度一下”元素

crtl+F搜索复制的xpath ,就可以定位所在元素位置 

2.操作测试对象 

对元素进⾏操作,常⻅的操作,有点击、提交、输⼊、清 除、获取⽂本

2.1 点击/提交对象

click()
  1. //找到百度⼀下按钮并点击
  2. driver.findElement(By.cssSelector("#su")).click();

2.2 模拟按键输⼊

sendKeys("")
  driver.findElement(By.cssSelector("#kw")).sendKeys("2025大年三十倒计时计时器");

2.3 清除⽂本内容

输⼊⽂本后⼜想换⼀个新的关键词,这⾥就需要⽤到 clear()

  1. driver.findElement(By.cssSelector("#kw")).sendKeys("我爱游戏");
  2. driver.findElement(By.cssSelector("#kw")).clear();
  3. driver.findElement(By.cssSelector("#kw")).sendKeys("我爱学习");

2.4 获取⽂本信息

getText();
  1. List<WebElement> elements = driver.findElements(By.cssSelector("#hotsearch-content-wrapper > li > a > span.title-content-title"));
  2. for (int i = 0; i < 10;i++){
  3. System.out.println(elements.get(i).getText());
  4. }

不可以通过 getText() 获取到“百度⼀下按钮”上的⽂字“百度⼀下”

⽂本和属性值获取方式不一样,获取属性值需要使⽤⽅法getAttribute(" 属性名称 ") ;

2.5 获取当前⻚⾯标题

getTitle();

2.6获取当前⻚⾯URL

getCurrentUrl() ;

3.窗⼝

3.1 窗⼝设置⼤⼩

  1. //窗⼝最⼤化
  2. driver.manage().window().maximize();
  3. //窗⼝最⼩化
  4. driver.manage().window().minimize();
  5. //全屏窗⼝
  6. driver.manage().window().fullscreen();
  7. //⼿动设置窗⼝⼤⼩
  8. driver.manage().window().setSize(new Dimension(1024, 768));

3.2 窗⼝切换

1)获取当前⻚⾯句柄: driver.getWindowHandle();

2)获取所有⻚⾯句柄: driver.getWindowHandles();

3)切换当前句柄为最新⻚⾯

  1. //点击新闻
  2. driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
  3. String curHandle = driver.getWindowHandle();
  4. Set<String> allHandle = driver.getWindowHandles();
  5. for(String handle : allHandle){
  6. if (handle != curHandle) {
  7. //切换页面
  8. driver.switchTo().window(handle);
  9. }
  10. }
  11. //测试百度新闻首页
  12. driver.findElement(By.cssSelector("#city_name"));

3.3 屏幕截图

屏幕截图⽅法需要额外导⼊包:

  1. <dependency>
  2. <groupId>commons-io</groupId>
  3. <artifactId>commons-io</artifactId>
  4. <version>2.6</version>
  5. </dependency>
  1. void Screen (String str) throws IOException {
  2. //屏幕截图
  3. SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
  4. SimpleDateFormat sim2 = new SimpleDateFormat("HHmmss");
  5. String dirTime = sim1.format(System.currentTimeMillis());
  6. String fileTime = sim1.format(System.currentTimeMillis());
  7. String filename = "./src/test/image/" + dirTime +"/" + str +"-"+fileTime+".png";
  8. System.out.println("filename:"+filename);
  9. File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
  10. //srcFile放到指定位置
  11. FileUtils.copyFile(srcFile,new File(filename));
  12. }

3.4关闭窗⼝

  1. driver.close();
  2. 注意:窗⼝关闭后 driver 要重新定义

4、等待

4.1 强制等待

Thread.sleep();

优点:使⽤简单,调试的时候⽐较有效,易理解

缺点:影响运⾏效率,浪费⼤量的时间

4.2 隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码 继续执⾏,直到超时没找到元素才会报错

implicitlyWait () ;

参数:Duration类中提供的毫秒、秒、分钟等⽅法

  1. //隐式等待5秒
  2. driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

隐式等待作⽤域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待 就⼀直⽣效。

4.3 显⽰等待

显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码

new WebDriverWait(driver, Duration.ofSeconds(3)).until($express);

 • elementToBeClickable(By locator)‒⽤于检查元素的期望是可⻅的并已启⽤,以便您可以单击它。

• textToBe (Bylocator , String str)-检查元素。

• presenceOfElementLocated(Bylocator)‒检查⻚⾯的DOM上是否存在元素。

• urlToBe(java.lang.String url)‒检查当前⻚⾯的URL是⼀个特定的URL

优点:

  1. 灵活性高:显式等待可以针对每个元素和场景设置不同的等待时间和条件。比如,等待元素可点击、可见、存在于DOM中等,这样可以根据实际情况灵活调整。
  2. 避免不必要的等待:只有在满足条件时才会继续执行,可以减少等待时间,不像隐式等待那样可能导致不必要的延迟。
  3. 精确控制:你可以选择不同的等待条件(如元素可见、可点击、元素存在等),适用于更复杂的场景,提供更高的控制权。

缺点:

  1. 需要更多的代码:每次使用显式等待时,都需要明确指定等待的条件和最大等待时间,可能导致代码更复杂。
  2. 可能增加代码冗余:在不同地方使用显式等待时,如果处理方式相似,可能会导致冗余的代码。

5.浏览器导航 

1,打开⽹站

  1. // 更⻓的⽅法
  2. driver.navigate().to("https://selenium.dev");
  3. // 简洁的⽅法
  4. driver.get("https://selenium.dev");

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

  1. driver.navigate().back();
  2. driver.navigate().forward();
  3. driver.navigate().refresh();

6. 弹窗

6.1警告弹窗

  1. Alert alert = driver.switchTo.alert();
  2. //确认
  3. alert.accept()

6.2 确认弹窗

  1. Alert alert = driver.switchTo.alert();
  2. //确认
  3. alert.accept()
  4. //取消
  5. alert.dismiss()

6.3 提⽰弹窗

  1. Alert alert = driver.switchTo.alert();
  2. alert.sendKeys("hello");
  3. alert.accept();
  4. alert.dismiss();

7. ⽂件上传

点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。 selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素 但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的

  1. WebElement ele = driver.findElement(By.cssSelector("body > div > div >
  2. input[type=file]"));
  3. ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

8.浏览器参数设置

1.设置⽆头模式

启用无头模式(没有显示的浏览器界面),这通常用于自动化测试

  1. Chrome0ptions options =new Chrome0ptions();
  2. options.addArguments("-headless");

2.设置浏览器加载策略

options.setPageLoadStrategy(PageLoadStrategy.NONE);

注:本文转载自blog.csdn.net的.比奇堡派大星.的文章"https://blog.csdn.net/jj666mhhh/article/details/145367093"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

127
测试
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top