Selenium 自动化测试框架

Selenium自动化框架介绍

Selenium是一款是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,模拟真实用户操作浏览器进行交互。支持大部分主流浏览器(IE、GoogleChrome、火狐、Safari等等)和其版本。可以通过Selenium测试项目与不同浏览器的兼容性(在不同浏览器和操作系统上是否能正常与运行),支持多种编程语言(Java、Python等)检验软件功能和用户需求。

Selenium的底层工作原理

Selenium的运行流程是调用对应浏览器驱动去进行控制操作浏览器。Selenium底层就是对浏览器driver的二次封装,调用driver中的及接口再利用浏览器原生API,封装成一套Selenium WebDriver API,而使用浏览器原生API,直接操作浏览器中的元素,也能让速度大大提升,同时大部分主流浏览器的驱动都遵守WebDriver规范,所以Selenium可以兼容多种不同浏览器驱动。

Selenium基本操作

1.元素定位

Selenium的定位主要是通过目标元素的属性值或者元素在页面中的路径,id和name具有唯一性所以在元素定位中它们的精准度相对较高,通常来说多层嵌套下的元素直接复制xpath来进行定位即可,如果要定位多个元素只需要修改为driver.findElements()。
在这里插入图片描述

2.元素交互

Selenium可以通过定位元素后对元素进行操控,模拟真实用户对浏览器进行操作交互。
click 点击对象
send_keys 在对象上模拟按键输入
clear 清除对象输入的文本内容
submit 提交
text 用于获取元素的文本信息

 private static void test() throws InterruptedException {
        // 打开百度首页
        webDriver.get("https://www.baidu.com");
        // 利用类选择器定位元素,百度输入框
        WebElement element = webDriver.findElement(By.cssSelector("#kw"));
        element.sendKeys("测试");
        sleep(2000);
 
        // 输入内容进行点击
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(2000);
    }

3.添加等待

sleep休眠
sleep是让页面强制等待,通常来说测试过程中网速问题或者服务器响应问题导致页面元素未加载,此时的解决方案就可以增加sleep()等待元素加载完成之后再进行后续操作。
隐式等待
通过添加driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS)的方法去添加隐式等待,通过隐式等待,WebDriver在试图查找_任何_元素时在一定时间内轮询DOM。当网页上的某些元素不是立即可用并且需要一些时间来加载时是很有用的。

4.浏览器操作

back() 模拟浏览器后退按钮
forward() 模拟浏览器前进按钮
refresh() 刷新页面(F5)
maximize() 设置浏览器最大化
setSize() 设置浏览器宽高

private static void test() throws InterruptedException {
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        // 点击
        webDriver.findElement(By.cssSelector("#su")).click();
        // 浏览器后退
        sleep(2000);
        webDriver.navigate().back();
        // 浏览器刷新
        sleep(2000);
        webDriver.navigate().refresh();
        // 浏览器前进
        sleep(2000);
         // 浏览器显示最大化
        webDriver.manage().window().maximize();
        sleep(2000);
        // 浏览器全屏
        webDriver.manage().window().fullscreen();
        sleep(2000);
        // 按照指定大小来显示
        webDriver.manage().window().setSize(new Dimension(800,800))
        webDriver.navigate().forward();
    }

5.键盘操作

sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)
sendKeys(Keys.SPACE) 空格键 (Space)
sendKeys(Keys.TAB) 制表键 (Tab)
sendKeys(Keys.ESCAPE) 回退键(Esc)
sendKeys(Keys.ENTER) 回车键(Enter)
sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
sendKeys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
sendKeys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
sendKeys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)

private static void test() throws InterruptedException {
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        // 测试Ctrl+A
        sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
        // 测试Ctrl+X
        sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
        // 测试Ctrl+V
        sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
        // 点击
        sleep(2000);
        webDriver.findElement(By.cssSelector("#su")).click();
    }

6.鼠标操作

contextClick() 右击
clickAndHold() 鼠标点击并控制
doubleClick() 双击
dragAndDrop() 拖动
release() 释放鼠标
perform() 执行所有Actions中存储的行为

private static void test() throws InterruptedException {
webDriver.findElement(By.cssSelector("#kw")).sendKeys("你好");
        // 点击百度一下按钮
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(2000);
        //找到测试鼠标右键点击"网页"
        WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > b"));
        // 鼠标右击
        Actions actions = new Actions(webDriver);
        sleep(2000);
        actions.moveToElement(webElement).contextClick().perform();
    }

7.切换窗口句柄

页面点击后有时会以新窗口打开,此时我们的元素定位依然在当前窗口,这时就需要切换到新打开的窗口上进行操作。WebDriver提供switchTo().window()方法可以实现在不同的窗口之间切换。

private static void test() {
    
        // 点击百度页面的新闻按钮
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        // getWindowHandles获取所以得窗口句柄
        // getWindowHandles获取当前页面的窗口句柄
//        System.out.println(webDriver.getWindowHandle());
        Set<String> handles = webDriver.getWindowHandles();
        String target_handle ="";
        for (String handle:handles){
            target_handle = handle;
        }
        webDriver.switchTo().window(target_handle);
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("你好");
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
    }

8.窗口截图

程序在执行自动化用例中,打印的错误信息不是很好分析,可以在执行过程中使用窗口截图来记录保存,使用getScreenshotAs()来截取当前窗口。

 private static void test() throws IOException, InterruptedException {
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(2000);
        File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        // 放到指定路径下
        FileUtils.copyFile(file,new File("D://selenium/t01.png"));
    }

9.上传文件

使用input实现的上传功能,只需要把他看作一个输入框,通过sendKey()指定本地文件路径来实现上传,如果想要实现点击弹窗来选择本地文件,可以搭配AutoIT脚本来实现对window的操作,使用java代码在自动化代码中执行.exe脚本来实现。

private static void test() {
        webDriver.get("http://39.104.54.203:58880");
        // sendKeys里是上传文件的路径
        webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\Bin\\xnn_res");
    }

常见问题

1.弹窗处理

JavaScript 有三种弹窗 alert (警告框) 、confirm (确认框) 、prompt (提框)alert (警告框)和confirm (确认框)的处理步骤:
使用 driver.switchTo ().alert ( 切换到警告框的上下文.
使用 accept () 方法接受警告框 (确认框) 或 dismiss ( 方法关闭警告 (确认框)

2.滚动条

Java +selenium 页面弹框中有滚动条,元素未找到问题,有时候明明页面中存在元素,但因为元素处于页面下方,不在当前显示出来的部分中,这是因为 Selenium 默认只会查找可见的元素,而滚动条中的元素处于不可见状态,这里采用在定位元素前进行一次滚动操作,让元素进入可见区域在进行元素定位。

public static void scrollToElement(WebDriver driver, WebElement element) {
        JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
        jsExecutor.executeScript("arguments[0].scrollIntoView(true);", element);
    }

也可以直接执行Js语句,(x,y) x和y都是必填参数,x正数表示向右负数表示向左,y正数表示向下负数表示向上

//(0,1000)表示直接到浏览器底部
driver.executeScript("window.scrollTo(0,1000)");
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Selenium是一个流行的自动化测试框架,它提供了一组工具和库,用于进行Web应用程序的自动化测试。Selenium具有以下几个主要组成部分: 1. Selenium WebDriver:它是Selenium的核心组件,用于编写和执行自动化测试脚本。它支持多种编程语言,包括Python,Java,C#等。通过使用WebDriver,可以模拟用户在浏览器中的行为,比如点击、输入文本等操作。 2. Selenium Grid:它允许在多个浏览器和平台上并行执行测试脚本。使用Grid,可以将测试任务分发给不同的节点,以加快测试的执行速度。这对于跨平台和异构环境中的自动化测试非常有用。 3. Selenium IDE:它是一个基于Firefox的插件,用于记录和回放用户在浏览器中的操作,以创建测试用例。Selenium IDE提供了一个简单易用的图形界面,但仅限于Firefox浏览器。 总结来说,Selenium是一个功能强大的自动化测试框架,可以帮助开发人员和测试人员编写和执行自动化测试脚本。通过使用Selenium WebDriver和其他组件,可以实现高效的测试脚本编写和执行,并支持并行测试和跨平台测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [selenium自动化测试框架](https://blog.csdn.net/kk_lzvvkpj/article/details/130902907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Selenium自动化测试框架](https://blog.csdn.net/qq_44954371/article/details/126611927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值