首页 > 其他分享 >vscode+robotframework的实践-selenium(更新中)

vscode+robotframework的实践-selenium(更新中)

时间:2024-06-21 17:22:15浏览次数:18  
标签:登录 vscode selenium robotframework 用例 点击 输入 password 账号密码

一 说明

  • 上一次使用robotframework还是2019年毕业刚进入工作的时候,使用的是robotframework的官方配套编辑器RIDE进行自动化脚本编写,在使用的过程中偶尔会遭遇卡顿、闪退等问题,当时排查问题大多数是因为RIDE自身与python版本以及操作系统之间的兼容性问题导致的,那时候没有编程意识,代码功底也相对薄弱,RIDE是一个对新手很好的编辑工具。但有前端编码经验后,使用vscode编辑器编写脚本的效率会更高,有相对应的插件支持,也是官方推荐的IDE之一。
  • 写这篇文章的目的主要是为了方便自己重新回忆robotframework的使用,结合vscode达到实战的目的,不足之处随时欢迎私信沟通鸭
  • 该文章比较适合有python+RF基础,想从RIDE改成用VScode编写用例的同学,听到测试套件(test_suite)、关键字(uesr_keyword)、资源(resorce)能立刻理解的,没有基础的同学可以先看相关书籍学习,此处推荐《自动化测试实战宝典》、《RobotFramework自动化测试修炼宝典》
  • 最好的RF教程其实都在RF官网,英语能力强的小伙伴建议直接看官网文档(或者借助翻译工具也行)

二 工具安装版本

  • vscode-V1.90.2
  • python-V3.11.9
  • 谷歌浏览器-V126.0.6478.115
  • 根据自己的谷歌浏览器安装对应的浏览器驱动,具体可查看SeleniumLibrary的git说明,其中也有讲解了怎么下载浏览器驱动

三 安装

3.1 安装RF(V7.0.1):pip install robotframework

3.2 安装Selenium Library(V6.5.0):pip install --upgrade robotframework-seleniumlibrary

3.3 在vscode上安装RF相关插件

写一个熟悉的helloworld。*** Test Cases ***此类的语法可以参考官网语法

*** Test Cases ***
test_case01
    Log    helloworld!

四 实践(持续更新中)

4.1 实践1:打开谷歌浏览器,进入百度界面,搜索并进入robotframe官网。

4.1.1 对应代码
点击查看代码
*** Comments ***
#此处用来填写说明
打开谷歌浏览器,进入百度界面,搜索并进入robotframe官网。
*** Settings ***
#此处用来设置用例,常见的有引入库、设置setup teardown
Library    SeleniumLibrary    
Test Teardown    Close Browser
*** Variables ***
#此处用来设置用例,常见的有引入库、设置setup teardown

*** Test Cases ***
#此处用来设置测试用例
Open Page    #用例名称
    [Teardown]    Run Keyword If Test Failed    Close Browser    #用例如果失败了就关闭浏览器
    Open Browser    url=https://www.baidu.com   browser=chrome    #打开百度搜索页面
    Maximize Browser Window    #窗口最大化
    Wait Until Page Contains Element    locator=id=kw    #等待元素出现,默认等待时间是5S
    Input Text    locator=id=kw    text=Robot Framework    #在id为kw的输入框里输入Robot Framework 
    Click Button    locator=id=su    #点击id为su的搜索按钮
    Wait Until Page Contains Element    locator=//div[contains(@mu, 'robotframework.org')]    #等待想要的搜索网址出现,这里是xpath选择器
    Click Element    locator=//div[contains(@mu, 'robotframework.org')]/div/div/h3/a    #点击对应标题
    Switch Window    locator=NEW    # 切换到新标签页,进入到rf网址
*** Keywords ***
#此处用来设置变量
4.1.2 使用vscode调试代码。这时候使用IDE的好处就出来了,断点调试在编写用例时非常使用,可以迅速帮我们找到BUG,以及随时停在我们需要检查的代码上,RIDE编辑器则无法做到这一步。

调试功能如下:

  • 继续:直接跳到下一个断点处,点击后就会顺序执行代码到断点2处时停下
  • 逐过程:如果代码中有循环或者子函数的话,进入带循环里和子函数,但是当前没有循环,所以点击后的效果也相当于单步调试
  • 单步调试:从当前断点处,点击一次逐步执行一行代码(不打断点也可以)
  • 单步跳出:进入代码中有循环或者子函数的时候,可以点击这个跳出循环和子函数进入到下一行代码
  • 重启:顾名思义,重新执行代码
  • 停止:顾名思义,停止当前代码

4.1.3 其他说明
  • vscode可以在使用关键字时快速匹配相关关键字列表

  • 鼠标移动到关键字上,也可以快速给出关键字说明

  • 遗漏哪些必填项,也能给出对应错误信息

4.2 实践2:登陆界面功能测试

4.2.1 环境配置

4.2.1.1 先简单写一个登陆界面,用于测试。把这两个html代码放置在一个文件目录下,对login.html右键使用open with live sever可以在浏览器中打开对应网址。open with live sever功能可以创建一个服务,方便我们调试html代码

点击查看login.html代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Login Page</title>
    <style>
      body {
        font-family: Arial, sans-serif;
        text-align: center;
      }
      .container {
        margin-top: 100px;
        width: 300px;
        margin-left: auto;
        margin-right: auto;
      }
      input[type='text'],
      input[type='password'],
      input[type='submit'] {
        width: 100%;
        padding: 12px 20px;
        margin: 8px 0;
        display: inline-block;
        border: 1px solid #ccc;
        box-sizing: border-box;
        font-size: 16px;
      }
      input[type='submit'] {
        background-color: #4caf50;
        color: white;
        border: none;
        cursor: pointer;
      }
      input[type='submit']:hover {
        background-color: #45a049;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h2>Login</h2>
      <form id="loginForm" onsubmit="return checkLogin()">
        <label for="username">Username:</label><br />
        <input type="text" id="username" name="username" /><br />
        <label for="password">Password:</label><br />
        <input type="password" id="password" name="password" /><br /><br />
        <input type="submit" value="Login" />
      </form>
      <p id="loginMessage" style="display: none; color: green">
        Login successful!
      </p>
    </div>

    <script>
      function checkLogin() {
        var username = document.getElementById('username').value
        var password = document.getElementById('password').value
        if (!username || !password) {
          alert('请输入账号密码后再点击登录!')
          return false
        } else if (username === 'root' && password === 'root1234') {
          document.getElementById('loginMessage').style.display = 'block'
          window.location.href = './mainPage.html'
          return false // Prevent form submission
        } else if (username === 'root' && password != 'root1234') {
          alert('密码错误,请输入正确的密码!')
          return false
        } else {
          alert('账号密码错误,请检查账号密码!')
          return false
        }
      }
    </script>
  </body>
</html>
点击查看mainPage.html代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数据搜索页面</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
        th, td {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 8px;
        }
        th {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <h1>数据搜索页面</h1>
    <form id="searchForm">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="gender">性别:</label>
        <select id="gender" name="gender">
            <option value="">全部</option>
            <option value="male">男</option>
            <option value="female">女</option>
        </select>
        <button type="button" onclick="searchData()">搜索</button>
    </form>

    <br>

    <table id="dataTable">
        <thead>
            <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>张三</td>
                <td>男</td>
                <td>25</td>
            </tr>
            <tr>
                <td>2</td>
                <td>李四</td>
                <td>男</td>
                <td>30</td>
            </tr>
            <tr>
                <td>3</td>
                <td>王芳</td>
                <td>女</td>
                <td>28</td>
            </tr>
        </tbody>
    </table>

    <script>
        function searchData() {
            var inputName = document.getElementById('name').value.toLowerCase();
            var inputGender = document.getElementById('gender').value.toLowerCase();
            var table = document.getElementById('dataTable');
            var rows = table.getElementsByTagName('tr');
            
            for (var i = 1; i < rows.length; i++) {
                var name = rows[i].getElementsByTagName('td')[1].innerText.toLowerCase();
                var gender = rows[i].getElementsByTagName('td')[2].innerText.toLowerCase();
                
                var nameMatch = name.includes(inputName);
                var genderMatch = (inputGender === '' || (inputGender === 'male' && gender === '男') || (inputGender === 'female' && gender === '女'));
                
                if (nameMatch && genderMatch) {
                    rows[i].style.display = '';
                } else {
                    rows[i].style.display = 'none';
                }
            }
        }
    </script>
</body>
</html>

登陆页面功能设计如下:

  • 功能1:输入正确的账号密码(root/root1234),登录成功,跳转到主页
  • 功能2:输入正确的账号,错误的密码,登录失败并给出提示信息:密码错误,请输入正确的密码
  • 功能3:输入错误的账号密码,登录失败并给出提示信息:账号密码错误,请检查账号密码
  • 功能4:不输入账号密码点击登录,登录失败并给出提示信息:请输入账号密码后再点击登录!

4.2.1.2 根据页面功能设计用例

  • 用例1:输入正确的账号密码(root/root1234)。 预期:登录成功,跳转到搜索界面
  • 用例2:输入正确的账号,错误的密码。 预期:登录失败并给出提示信息:密码错误,请输入正确的密码
  • 用例3:不输入账号输入密码点击登录。 预期:登录失败并给出提示信息:请输入账号密码后再点击登录!
  • 用例4:输入账号不输入密码点击登录。 预期:登录失败并给出提示信息:请输入账号密码后再点击登录!
  • 用例5:不输入账号密码点击登录。 预期:登录失败并给出提示信息:请输入账号密码后再点击登录!
  • 用例6:输入错误的账号密码。 预期:登录失败并给出提示信息:账号密码错误,请检查账号密码
4.2.1 编写RF代码

4.2.1.1 目录结构

4.2.1.2 相关代码

点击查看login_keywords.robot代码
*** Comments ***
登录相关的全局关键字
*** Settings ***
Library    SeleniumLibrary   
*** Variables ***
${IMPLICIT_WAIT_TIME}    5
${LOGIN_URL}    http://127.0.0.1:5500/view/login.html
*** Keywords ***
OPEN LOGIN PAGE
    Open Browser    ${LOGIN_URL}    chrome
    Set Selenium Implicit Wait    ${IMPLICIT_WAIT_TIME}
点击查看keywords.robot代码
*** Comments ***
登陆页面用到的关键字
*** Settings ***
Library    SeleniumLibrary   
*** Keywords ***
INPUT USER AND PASSWORD
    [Arguments]    ${username}   ${password}
    [Documentation]    输入用户名(username)和密码(password)
    Input Text    locator=//input[@id="username"]    text=${username}
    Input Text    locator=//input[@id="password"]    text=${password}
    Click Element    locator=//input[@type="submit"]
点击查看login.robot代码
*** Comments ***
测试登陆页面
*** Settings ***
Library    SeleniumLibrary    
Resource    ../keywords/login_keywords.robot
Resource    ./keywords.robot
Suite Setup    OPEN LOGIN PAGE    #自定义关键字
Suite Teardown    Close Browser
*** Test Cases ***
登录成功
    [Tags]    smoke    login    P    #标签
    INPUT USER AND PASSWORD    username=root    password=root1234    #使用自定义关键字
    Element Should Be Visible    locator=//h1[text()='数据搜索页面']
登录失败-账号正确密码错误
    [Tags]    smoke    login    N
    Go To    url=${LOGIN_URL}
    INPUT USER AND PASSWORD    username=root    password=root12345
    ${alert_message} =    Handle Alert 
    Should Be Equal As Strings    ${alert_message}    密码错误,请输入正确的密码!
登录失败-不输入账号
    [Tags]    smoke    login    N
    Go To    url=${LOGIN_URL}
    INPUT USER AND PASSWORD    username=    password=root1234   
    ${alert_message} =    Handle Alert 
    Should Be Equal As Strings    ${alert_message}    请输入账号密码后再点击登录!
登录失败-不输入密码
    [Tags]    smoke    login    N
    Go To    url=${LOGIN_URL}
    INPUT USER AND PASSWORD    username=root    password=  
    ${alert_message} =    Handle Alert 
    Should Be Equal As Strings    ${alert_message}    请输入账号密码后再点击登录!  
登录失败-不输入账号和密码
    [Tags]    smoke    login    N
    Go To    url=${LOGIN_URL}
    INPUT USER AND PASSWORD    username=    password=    
    ${alert_message} =    Handle Alert 
    Should Be Equal As Strings    ${alert_message}    请输入账号密码后再点击登录! 
登录失败-账号密码错误
    [Tags]    smoke    login    N
    Go To    url=${LOGIN_URL}
    INPUT USER AND PASSWORD    username=root1   password=root1234
    ${alert_message} =    Handle Alert 
    Should Be Equal As Strings    ${alert_message}    账号密码错误,请检查账号密码!
*** Keywords ***
#此处用来设置变量

4.2.1.3 其他说明

  • 有一些步骤是重复的,此时可以采用自定义关键字的写法,提高效率。robot文件之间是可以相互引用的,例如A.robot要引用B.robot里的关键字,只需要在A.robot的Settings处通过使用Resource关键字引用B.robot文件,即可使用B.robot文件里头的Keywords。至于文件命名以及目录命名这个就需要自己结合项目的实际情况去创建,一个好的清晰的目录结构有利于项目分工合作和后期拓展,所以还是需要想一下的。
  • 在vscode也支持单个执行用例、按套件执行用例、按目录执行用例,调试同理。

五 可能遇到的问题

5.1 怎么判断自己写的xpath、css选择器是否正确?

可以利用谷歌开发者工具,在元素这里按f出现搜索框,再将我们的xpath贴上去,如果能搜索到就代表我们写的路径没错。需注意检查一下有几个搜索结果,使用相对路径的情况下,匹配条件不充分可能会匹配到多个结果。

5.2 怎么了解Library里面的关键字,或者说怎么快速判断应该使用哪一个关键字

对关键字的使用基本上是熟能生巧,不熟悉的情况可以借助chatGPT也可以去Library对应的官网,会有关键字文档说明

  • 去官网查阅关键字文档说明

  • 借助chatGPT,但chatGPT是有可能输出错误答案的,要适当的举一反三

标签:登录,vscode,selenium,robotframework,用例,点击,输入,password,账号密码
From: https://www.cnblogs.com/hiayap/p/18258910

相关文章

  • 基于SquLine和vscodePc模拟端环境搭建并在硬件上运行
    一、环境搭建vscode环境搭建参考博客LVGL在VScode中安装模拟器运行配置笔记教程。SquareLine下载安装即可。二、SquareLine导出代码复制到vscode工程的文件夹中在将SquareLine界面设计完成后,将ui_code下的文件和文件夹复制到vscode工程的user(自己创建的文件夹)下,并在./下的Cmake......
  • vscode python编程入门与插件推荐
    使用背景作者是一名ai测开工程师,工作环境中通常会使用到pythonshellpostgresql数据库jupyter,shh工具git版本控制等,因此向选用一个适合自己的文本编辑软件,经过长时间磨合,最终选择VScode作为我的工作软件优点内存占用率低,集成度高,开源免费插件推荐AI助手:codegeex此插件......
  • windows离线部署VSCode在Centos7上的远程开发环境
    前言公司一直使用的是ssh+vim的远程开发方式,习惯了vim之后已经非常方便了。但是还是想尝试一下VSCode的开发方式。就我而言,原因如下漂亮的语法高亮,并且有补全基于语法解析的引用查找(尽管在我们项目的场景下还是一坨翔)Ctrl+Shift+F的快速搜索可视化调试,可以直接在代码中下......
  • Vscode远程ubuntu
    远程连接到这里vscode远程到ubuntu和关闭远程连接,已完成配置python环境在远程目录下新建.vscode隐藏文件夹,文件夹里新建一个 settings.json文件,先远程服务器看下conda下的python虚拟环境位置settings.json位置及内容如下测试python环境打印pytho......
  • Airtest-Selenium实操小课④:微信读书上阅读书籍
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途1.前言上一课我们讲到用Airtest-Selenium爬取下载可爱的猫猫图片,还没看的同学可以戳这里看看~那么今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网......
  • Selenium - 入门指南
    入门指南如果你是Selenium的新手,我们有一些资源帮助你快速入门.Selenium通过使用 WebDriver 支持市场上所有主流浏览器的自动化。Webdriver是一个API和协议,它定义了一个语言中立的接口,用于控制web浏览器的行为。每个浏览器都有一个特定的WebDriver实现,称为驱动程......
  • Selenium - 概述
    了解组件使用WebDriver构建测试套件需要您理解并有效地使用许多不同的组件。就像软件中的一切一样,不同的人对同一个想法使用不同的术语。下面是在这个描述中如何使用术语的细分。专业术语API: 应用程序编程接口。这是一组用来操作WebDriver的“命令”。库: 一个代码......
  • selenium框架学习之获取文本框内容和Xpath元素不唯一
    本周一直写创建简历的测试用例,由于元素和内容过多,只能把各个方法单独封装,然后在测试用例里面使用,以此优化用例。在封装的时候遇到的一些问题,和大家说下怎么解决~1. 获取文本框输入---新增了一个【输入微信号】的功能模块,需要同时测试点击【同手机】和输入文本的功能。于是......
  • 这几个必备的vscode插件,你安装了几个
    作为一名前端开发者,vscode想必大家应该都接触过,就像大多数IDE一样,VSCode也有一个扩展和主题市场,包含了数以千计质量不同的插件。作为一名熟练掌握各种前端开发工具安装和卸载的大师兄来说,为大家安利好玩有用的工具插件是我义不容辞的责任,所以我精挑细选了九款必备的vscode插件......
  • 三、浅谈 Selenium
    1.Selenium简介:Selenium是一款免费的、开源的、基于Web页面的UI自动化测试工具,可以支持多个浏览器。 2.Selenium框架由多个工具组成:SeleniumIDE、SeleniumRC、SeleniumWebDriver、SeleniumGrid(2.1)SeleniumIDE:通过录制操作完成基本脚本构建的工具;(2.2......