• selenium 自动化测试


    目录

    测试工具

    QTP的自动化测试

    selenium自动化

    selenium基本内容

    定位元素方法:

    Xpath定位表达式语法

    层级关系

    常见写法

    轴定位表达式

    特殊写法:

    注意事项:

    css定位表达式语法:

    层级关系

    常见写法 

    有什么操作:click、sedkeys、clear

    模拟键盘操作

    Console确定元素是否可以操作

    selenium上传文件

    1、如果是input 标签--input元素

    2、非input元素--如果不 是input 标签

    Robot类完成底层键鼠的控制。

    脚本execute_script 

    模拟鼠标操作

    Selenium判断函数:

    自动化测试问答题

    其他博主知识收集处

    启动浏览器基础代码 

    selenium进行对cookie管理

    进行识别base64,如图片




     Xpath基础表达式,请参该如下

    1.菜鸟教程(基础):XPath 语法 | 菜鸟教程

    2.W3school文章(基础):HTML 教程



    测试工具

    1,自动化功能测试工具:QTP、selenium

    2,自动化性能测试功能:LoadRunner、jmeter

    3,自动化接口测试工具:Charles、soapUI、LoadRunner、jmeter、fiddler、Wireshark

    4,测试管理工具:禅道、qc、jira、testlink

    管理需求,管理测试计划、管理测试用例、管理bug、分析bug

    QTP的自动化测试

     录制的原理:将被测试的对象,放在对象库中,并且给一个唯一的标识

     回放的原理:将对象库中的对象与实际运行的对象进行对比,如果一致就运行,不一致就报错。

      Selenium的工作原理:获取页面元素,操作页面元素

     Selenium是通过什么方法获取页面上的元素:findelEment  

    selenium自动化

    selenium基本内容

    selenium组件:

        ①Selenium IDE:火狐浏览器,selenium中唯一能够看到界面的东西;

    提供了录制、回放功能,可以将录制的步骤,转换成

    各种语言,默认录制成为的语言为HTML

                 ②Selenium webdriver:jar包,支持:Java、Python、C#,PHP、net、ruby;

                                   通过编程语言,来执行项目的自动化

                 ③Selenium RC:服务,通过cmd命令来执行

                 ④Seleniumgrid:支持分布式测试用例的运行

    Selenium2=selenium RC + selenium webdriver

    Selenium IDE:录制,回放,可转换语言---- 图形化界面

    实现自动获取浏览器驱动,从而解决重复下载浏览器的驱动

    WebDriverManager实现自动获取浏览器驱动(Java) - 码农教程

    1. <dependency>
    2. <groupId>io.github.bonigarcia</groupId>
    3. <artifactId>webdrivermanager</artifactId>
    4. <version>4.4.1</version>
    5. </dependency>
    1. //设置下载驱动路径,设置当前项目下的DriverExe文件夹中
    2. System.setProperty("webdriver.chrome.driver", "DriverExe");
    1. //默认下载最新驱动
    2. WebDriverManager.chromedriver().setup();

    定位元素方法:

    ID、name、tagname、classname、xpath、linktext、partial link text、css

    Xpath定位表达式语法

    XPath 语法 | 菜鸟教程:XPath 语法 | 菜鸟教程

    层级关系

    层级关系的表达:
                    子元素                 /
                    子孙元素             //
                    父元素                 /..
                    爷爷                    /../..
                    兄弟元素            :

    常见写法

    1、描述元素拥有attr属性,如:[@attr]  

    2、描述 元素的attr属性的值是value,如:[@attr='value']    

    3、描述 元素的attr属性的值内容包含value 如:[contains(@attr,'value')]

    4、表示否定 如:[not(限制条件)]

    5、连接多个条件  and ,or  只不过or没有什么意义。

    //input[@value='臭豆腐' or @value='烤生蚝']
    //input[@type='checkbox' and @value='烤生蚝']

    6、通过文本内容来进行定位

        文本内容确定,如小龙龙:

    [string()='小龙龙']  [text()='小龙龙']

        文本内容包括,如小龙龙:

    [contains(string(),'小龙龙')]
    [contains(text(),'小龙龙')]

    string()和text()的区别:
                string()获取到的是一个元素中即使被子元素截断了文本,也会拼接起来的内容。  获取到string()内容更多
                text() 获取到的是一个元素中,到下一个元素之间的纯文本。      text()内容更少。

    7、序号作为限制条件   [序号]  如//input[8]

    8、组合元素名、属性、内容 和元素层级关系进行定位。

        先定位到文本内容为小龙龙的label,然后找他的子元素input。

    //label[text()='小龙龙']//input

        表示定位用户名的父元素的第二个input子元素。

    //label[text()='用户名:']/../input[2]

    9、 特殊写法

      svg标签写法

    //*[name()="svg"]

    属性没有值,xpath怎么写 

    //div[@style=""]

    轴定位表达式

    用得最多的就是用来定位兄弟:  following-sibling:弟弟  和 preceding-sibling:哥哥  以及 先辈元素:ancestor

    ①表示查找 文本内容为用户昵称的label的弟弟元素 input 并且这个Input的 placeholder是请输入用户名。

    //label[text()='用户']/following-sibling::input[@placeholder='密码']

    ②序号和谓语限制表达式同时使用,查找第一个弟弟。

    //label[text()='用户']/following-sibling::input[@placeholder='密码']

    ③表示查找 文本内容为用户昵称的label的哥哥元素 input 并且这个Input的 placeholder是请输入用户名。

    //label[text()='用户']/preceding-sibling::input[@placeholder='密码']

    特殊写法:

    只有行内样式style不同时xpath怎么写:

    //form[not(@style='display: none;')]

    同时满足符合xpath1定位但是不符合xpath2定位:

    xpath1|not xpath2

    注意事项:

    注意xpath里面的 ' 和 " 可以混用,成对出现,但是用'' 和用""都行。 

    css定位表达式语法:

    层级关系

    层级关系的表达:

        查找子孙元素:     空格                   如:form label

        查找子元素:         >                        如:form>div

        查找弟弟元素:     ~                        如:label~input

    常见写法 

    1、拥有attr属性的任意元素,如:[attr]     对应于xpath://*[@attr]

    2、拥有attr属性的tag元素,如:tag[attr]   对应于xpath://tag[@attr]

    3、attr=value键值对模式,如:[attr='value']  对应于xpath://*[@attr='value']

    css选择器特有写法:

          #idValue  相当于[id='idValue']

          .showlove   相当于 [class='showlove']

          *= 表示包含  [class*='how']  表示的是元素class属性包含how,即相当于xpath中contains
          ^= 表示开头包含
          $= 表示结尾包含

    4、css没有用元素内容进行定位的选择器  而xpath有://tag[text()='元素内容']

    5、序号:nth-child(序号)   表示这个元素是父元素的第几个子元素(不管元素类型)

    ①表示要查找的是login这个div的第3个子元素,相当于xpath中的[序号]

    #login>*:nth-child(3)

    ②表示的是查找login元素的子元素label,并且这个子元素,是div的所有子元素中的第2个。

    #login>label:nth-child(2)

    ③表示要查找的是login这个div的第3个label子元素

    #login>label:nth-of-type(3) 

    有什么操作:click、sedkeys、clear

               Select:selectvisibletext(“可见文本”);

               Selectindex(索引从0开始,整数);

               Selectvalue(“HTML中的value值”);

               Switchto().Alert;跳转到弹出框

               Alert.accept,alert.dismiss弹出框的确定和取消

               refresh();刷新

               back、forward,向后、向前

               Selenium获取函数

               Gettext();获取文本

               Getattribute();获取按钮上的文本

               Gettitle();获取标题

               Geturl();获取当前网址

               Getwindowhandle();获取窗口的句柄

    模拟键盘操作

    需要说明的是,上面的脚本没有什么实际意义,但向我们展示了模拟键盘各种按键与组合键的用法。

    • import org.openqa.selenium.Keys;

    在使用键盘按键方法前需要先导入 keys 类。

    以下为常用的键盘操作:

    • 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)

    • sendKeys(Keys.F1) 键盘 F1

    Console确定元素是否可以操作

    原因1:需要定位的元素在页面中被隐藏了

    解决办法:重新定位,通过控制台输入js脚本点击

      

    selenium上传文件

    1、如果是input 标签--input元素

    如果是input元素的文件上传,可以通过Selenium当中的 send_keys 方式进行传递,

    Java和python都可以用 sendkeys 上传

    但是这种方式局限性比较大,如果遇到像通过 js 调用的组件会有一些问题;这个时候就需要通过一些和系统交互的方式完成上传操作,比如通过autoit、robot,pywinauto或者说pyautogui这些第三方库进行操作。

    2、非input元素--如果不 是input 标签

                    Java 可以用autoIT 或者robot 上传

                    Python 可以用autoIT 或者pyauto  pywinauto  pyautogui上传

    Robot类完成底层键鼠的控制。

    鼠标基本控制方法

    mousemove()
    mousePress()
    mouseRelease()

    键盘输入:

      1、操作系统剪贴板

      2、直接输入

      keyPress keyRelease方法

    robotframework

    脚本execute_script 

    浏览web网站时,经常需要进行滑动页面操作。Selenium自动化测试过程中,可以通过execute_script 执行js语句实现页面滑动。
    常见的滑动场景分为四种:滑动至底部、滑动至顶部、滑动至具体位置、滑动至目标元素可见。

    滑动至底部:

    1. # 模拟鼠标滚轮,滑动页面至底部
    2. js = "window.scrollTo(0, document.body.scrollHeight)" 
    3. driver.execute_script(js)

    滑动至顶部:
    # 模拟鼠标滚轮,滑动页面至顶部

    1. js = "window.scrollTo(0, 0)"
    2. driver.execute_script(js)

    滑动至具体位置:

    driver.execute_script("window.scrollTo(x, y)")  # 滑动到具体位置

    $x("//span[contains(text(),'单位所在市')]")[0].scrollIntoView(false)
    1. js = "window.scrollBy(0, 500)"  # 向下滑动500个像素
    2.  
    3. js = "window.scrollBy(0, -500)" # 向上滚动500个像素
    4.  
    5. js = "window.scrollBy(500, 0)"  # 向右滑动500个像素
    6.  
    7. js = "window.scrollBy(-500, 0)" # 向左滚动500个像素

    滑动至目标元素可见:

    # 向下滚动至-元素可见

    driver.execute_script("arguments[0].scrollIntoView();", element)

    # 向上滚动至-元素可见

    driver.execute_script("arguments[0].scrollIntoView(false);", element)

    # js 执行修改按钮颜色

    ((JavascriptExecutor) driver).executeScript("document.getElementById('locatorid').style.backgroundColor = 'lightblue';");

         * js点击 修改按钮颜色

         * @param script js点击

    1. public void jsClick(String script){
    2. try {
    3. JavascriptExecutor jsRunner=(JavascriptExecutor)driver;
    4. jsRunner.executeScript("document.getElementById('"+script+"').style.backgroundColor = 'lightblue';");
    5. } catch (Exception e) {
    6. log.info("执行js"+script+"失败");
    7. }
    8. }

    模拟鼠标操作

    1. // 实例化actions类。调用doubleClick方法,双击目标元素
    2. WebElement day = driver.findElement(By.id("20210817"));// 将需要双击的WebElement对象定义为day
    3. Actions actions = new Actions(driver);// 实例化Actions类对象:actions,并将driver传给actions
    4. actions.doubleClick(day).perform();
    1. // 调用moveToElement方法,把鼠标移动到目标元素上
    2. WebElement Qui = driver.findElement(By.id("QuickMenu"));
    3. actions.moveToElement(Qui).perform();
    1. // 调用contextClick方法,执行右击
    2. WebElement eteams = driver.findElement(By.id("eteams"));
    3. actions.contextClick(eteams).perform();
    1. // 定位能拖拽的元素
    2. WebElement move = driver.findElement(By.id("dragga"));
    3. // 定位拖拽目标位置元素
    4. WebElement target = driver.findElement(By.id("droppa"));
    5. // 调用dragAndDrop方法,执行拖拽
    6. actions.dragAndDrop(move, target).build().perform();
    1. // 调用moveToElement方法,将鼠标移动到目标元素,并且单击
    2. WebElement logouts = driver.findElement(By.id("logout"));
    3. actions.moveToElement(logouts).click().perform();
    4. }

    Selenium判断函数:

               Isenabled();判断是否可用

               Isselected();判断是否被选择

               Ischecked();复选框是否被选中

    自动化测试问答题

    要确保selenium的成功率:  设置暂停时间、元素获取准确、设置超时间

    自动化测试的步骤:  制定计划-----创建脚本----增加脚本-----回放脚本----分析结果报告

    自动化测试需要测试用例吗?需要

    软件测试的阶段:单元测试—集成测试----系统测试—验收测试

    自动化测试属于那些测试阶段:系统测试阶段

    怎样的功能才能需要进行自动化:需要自动重复使用、常用的

    自动化测试的测试用例从哪里来?①  手工测试用例来选择②  适当给予补充

    Selenium 测试:用到了单元测试的框架:Junit 、testng

    其他博主知识收集处

    java使用selenium实现模拟浏览器操作API大全 模拟登录_java模拟登录网站软件_tianjinsong的博客-CSDN博客

    启动浏览器基础代码 

    1. public static void main(String[] args){
    2. System.getProperties().setProperty("webdriver.chrome.driver", "D:\\script\\java\\WebAPPAPIDDT\\DriverExe\\chromedriver.exe");
    3. ChromeOptions chromeOptions = new ChromeOptions();
    4. System.out.println(chromeOptions);
    5. ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);
    6. chromeDriver.get("https://www.baidu.com/");
    7. JavascriptExecutor jsRunner=(JavascriptExecutor)chromeDriver;
    8. jsRunner.executeScript("//input[@value=\"百度一下\"]");
    9. }
    1. from selenium import webdriver
    2. driver = webdriver.Chrome()
    3. driver.get(“http://www.baidu.com”)
    4. search_button = driver.find_element_by_id(“su”)
    5. # 百度搜索按钮
    6. driver.execute_script(“arguments[0].style.backgroundColor =‘lightblue’”, search_button)
    7. #修改百度搜索按钮的背景值

    selenium进行对cookie管理

    【Java】获取cookie

    1. WebDriver.Options manage = driver.manage();
    2. Set<Cookie> cookies = manage.getCookies();
    3. for(Cookie c : cookies){
    4. System.out.println(c.getName()+ " = " + c.getValue());
    5. }

    【Java】添加cookie

    1. Cookie c1 = new Cookie("_vlco-","*************");
    2. driver.manage().addCookie(c1);

    Selenium:添加Cookie的方法 - 码农教程

    【Python】对cookie管理

    https://blog.csdn.net/weixin_38813807/article/details/129708032

    各驱动下载地址:npmmirror 镜像站

    进行识别base64,如图片

    base64 注意超级鹰识别是短号后面的部分才是base64图像部分,所以删除【data:image/jpg;base64,】超级鹰才能识别出来

    1. String inputStr="Test Base64 string";
    2. String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
    3. Boolean isLegal = inputStr.matches(base64Pattern);
    4. if (!isLegal) {
    5. System.out.println("输入的不是Base64编码的字符串。");
    6. }

     识别base64正则表达时

    String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";

     JAVA判断字符串是否为base64编码 - 代码先锋网

  • 相关阅读:
    【AIGC】如何提高Prompt准确度
    HTTP 错误 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面。
    你有在上传文件下载文件踩过坑吗?
    Mysql的基本命令
    Python 验证 IP 地址
    厉害了!有了它,发顶会顶刊拿赛事大奖轻松多了!
    交换数组中两个元素的值
    线程安全问题 --- 死锁
    vue多张图片实现TV端长图浏览组件
    安防监控系统/视频云存储/视频AI智能分析:人形检测算法应用汇总
  • 原文地址:https://blog.csdn.net/qq_36675754/article/details/127115076