seleniumbase学习总结3 - 开发测试用例脚本

1、梳理P0测试用例

因为随着迭代版本的开发,当前用例90%是无法当作UI测试用例基线的,因为用例要基于已有需求展开 合并、删除、新增、更新等一系列操作。
另外,UI自动化用例是基于用户行为展开的,跟平时大家写的多少有出入,所以需要从头到尾去梳理整个界面的P0用例,确保无遗漏。

2、掌握元素定位

2.1 框架关于定位的功能

sbase框架支持css、xpath定位,开发脚本过程中,只需要css、xpath的元素的位置就可以,无须by_xpath(),by_css().
建议使用css定位,因为计较灵活,且不局限于国际化,避免中英文环境,定位的内容会产生不同

from .page_objects import 页面1

    @pytest.mark.smoke
    @allure.title("搜索指定位置的内容")
    def test_002(self, search_key, expected_text, img):
        self.login()
        self.click(页面1.下拉框_国家)
        self.click(页面1.中国)
        self.click(页面1.下拉框_省州)
        self.click(页面1.陕西)
        self.click(页面1.搜索)
        self.sleep(1)
        self.assert_text("陕西", 页面1.表格_省州)

2.2 常用的css定位方法:

css定位官网:https://www.w3school.com.cn/cssref/css_selectors.asp

1、div p    选择 <div> 元素内的所有 <p> 元素
2、div > p    选择父元素是 <div> 的所有 <p> 元素
3、.name1.name2    选择 class 属性中同时有 name1 和 name2 的所有元素
4、.name1 .name2    选择作为类名 name1 元素后代的所有类名 name2 元素
5#firstname    选择 id="firstname" 的元素。
6、p:nth-child(2)    选择属于其父元素的第二个子元素的每个 <p> 元素

一:单一属性定位
1、id 定位
driver.find_element_by_css_selector(#kw’)
2、class 定位
driver.find_element_by_css_selector(’.s_ipt’)
3、其他属性定位
driver.find_element_by_css_selector([name=‘wd’])
driver.find_element_by_css_selector("[type=‘text’]")
二:组合属性定位
1:标签、id
driver.find_element_by_css_selector(“input#kw”)
2、标签、class
driver.find_element_by_css_selector(“input.s_ipt”)
3:标签、属性
driver.find_element_by_css_selector(“input[name=‘wd’])
5:属性、属性
driver.find_element_by_css_selector("[name=‘wd’][autocomplete=‘off’]")
6:模糊匹配属性值方法
(1)class有空格,匹配其中一个值
driver.find_element_by_css_selector(“input[class~=‘btn’])
(2)class以btn开头的
driver.find_element_by_css_selector(“input[class^=‘btn’])
(3)class以s_btn结尾的
driver.find_element_by_css_selector(“input[class$=‘s_btn’])
(4)class值以s分割的
driver.find_element_by_css_selector(“input[class|=‘s’]) #要求精确填写的属性值
三:层级定位
(1)form下面的span下面的input
driver.find_element_by_css_selector(‘from#form>span>input’)
(2)#id为u_sp的下面的第x个a标签。
driver.find_element_by_css_selector(#u_sp > a:nth-child(x)’)
————————————————
版权声明:本文为CSDN博主「阿_焦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45451320/article/details/115101192

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0z0J8Bv-1645622647060)(img_2.png)]

3、熟悉常用的api

3.1 常用api [后面文章有更新对源码中每个api的解读]

  • self.open(url) # 将浏览器窗口导航到url。
  • self.type(selector, text) # 用文本更新字段
  • self.click(selector) # 使用选择器单击图元
  • self.click_link(link_text) # 单击包含文本的链接
  • self.go_back() #导航回上一个URL
  • self.select_option_by_text(dropdown_selector, option) 按文本选择选项(下拉选择器,选项)
  • self.hover_and_click(hover_selector, click_selector) 悬停并单击(悬停选择器,单击选择器)
  • self.drag_and_drop(drag_selector, drop_selector) 拖放(拖放选择器,拖放选择器)
  • self.get_text(selector) #从元素中获取文本。
  • self.get_current_url() # 获取当前页面的url
  • self.get_page_source() # 获取当前页面的HTML
  • self.get_attribute(selector, attribute) # 获取元素属性。
  • self.get_title() # 获取当前页面的标题
  • self.switch_to_frame(frame) # 切换到iframe容器
  • self.switch_to_default_content() # 离开iframe容器
  • self.open_new_window() #在同一浏览器中打开新窗口
  • self.switch_to_window(window) # 切换到浏览器窗口
  • self.switch_to_default_window() # 切换到原始窗口
  • self.get_new_driver(OPTIONS) # 使用选项打开新驱动程序
  • self.switch_to_driver(driver) # 切换到浏览器驱动程序
  • self.switch_to_default_driver() # 切换到原始驱动程序
  • self.wait_for_element(selector) # 等待元素可见
  • self.is_element_visible(selector) # 返回元素是否可见
  • self.is_text_visible(text, selector) # 返回文本可见性
  • self.sleep(seconds) #在给定的时间内什么也不做
  • self.save_screenshot(name) # 在中保存截图。png格式
  • self.assert_element(selector) # 验证元素是否可见
  • self.assert_text(text, selector) # 验证元素中的文本
  • self.assert_title(title) # 验证网页的标题
  • self.assert_downloaded_file(file) # 验证文件是否已下载
  • self.assert_no_404_errors() # 验证没有断开的链接
  • self.assert_no_js_errors() # 验证没有js错误

3.2 英文代码示例

from seleniumbase import BaseCase


class DemoSiteTests(BaseCase):
    def test_demo_site(self):
        self.open("https://seleniumbase.io/demo_page")

        # Assert the title of the current web page
        self.assert_title("Web Testing Page")

        # Assert that the element is visible on the page
        self.assert_element("tbody#tbodyId")

        # Assert that the text appears within a given element
        self.assert_text("Demo Page", "h1")

        # Type/update text in text fields on the page
        self.type("#myTextInput", "This is Automated")
        self.type("textarea.area1", "Testing Time!\n")
        self.type('[name="preText2"]', "Typing Text!")

        # Verify that a hover dropdown link changes page text
        self.assert_text("Automation Practice", "h3")
        try:
            self.hover_and_click(
                "#myDropdown", "#dropOption2", timeout=2)
        except Exception:
            # If a human moves the mouse while the test runs
            self.js_click("#dropOption2")
        self.assert_text("Link Two Selected", "h3")

        # Verify that a button click changes text on the page
        self.assert_text("This Text is Green", "#pText")
        self.click("#myButton")
        self.assert_text("This Text is Purple", "#pText")

        # Assert that the given SVG is visible on the page
        self.assert_element('svg[name="svgName"]')

        # Verify that a slider control updates a progress bar
        self.assert_element('progress[value="50"]')
        self.press_right_arrow("#myslider", times=5)
        self.assert_element('progress[value="100"]')

3.3 中文代码示例

# Chinese / 中文 - Translations - Python 3 Only!
from seleniumbase import BaseCase
from seleniumbase import MasterQA


class 硒测试用例(BaseCase):  # noqa
    def __init__(self, *args, **kwargs):
        super(硒测试用例, self).__init__(*args, **kwargs)
        self._language = "Chinese"

    def 开启(self, *args, **kwargs):
        # open(url)
        return self.open(*args, **kwargs)

    def 开启网址(self, *args, **kwargs):
        # open_url(url)
        return self.open_url(*args, **kwargs)

    def 单击(self, *args, **kwargs):
        # click(selector)
        return self.click(*args, **kwargs)

    def 双击(self, *args, **kwargs):
        # double_click(selector)
        return self.double_click(*args, **kwargs)

    def 慢单击(self, *args, **kwargs):
        # slow_click(selector)
        return self.slow_click(*args, **kwargs)

    def 如果可见请单击(self, *args, **kwargs):
        # click_if_visible(selector, by=By.CSS_SELECTOR)
        return self.click_if_visible(*args, **kwargs)

4、根据梳理的P0用例开发脚本步骤

将执行用例的步骤写入测试用例脚本中,将需要定位的 “元素”放入 page_objects.py 例如:

    @pytest.mark.smoke
    @allure.title("输入国家,点击搜索,搜索到指定数据")
    def test_001(self):
        self.login()
        self.click(专家管理.专家管理2)
        self.assert_element(专家管理.专家管理2)
        self.click(专家管理.下拉框_国家)
        self.click(专家管理.美国)
        self.click(专家管理.搜索)
        self.assert_text("美国", "//div[@id='expert-table']/div[3]/table/tbody/tr/td[3]/div/div")

5、需要定位的 “元素”放入 page_objects.py

在这里插入图片描述

6、如何快速定位元素

  • 在定位到的元素上 右键 > 复制 > 复制selector
  • 1、原始:body > div:nth-child(6) > div.el-scrollbar > div.el-select-dropdown__wrap.el-scrollbar__wrap > ul > li:nth-child(1)
  • 2、优化::nth-child(6) .el-scrollbar .el-select-dropdown__wrap.el-scrollbar__wrap li:nth-child(1)
  • 优化后的元素要查看是否定位到
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfMg7EF7-1645622647062)(img_4.png)]
  • 有些css定位不到,则输入xpath的定位内容,比如:表格的定位css暂时没定位出来,xpath直接定位出来
  • 常用定位的优先级:

(1)有id点id
(2)有文本值用文本值

xpath=“//a[text()=‘新闻’]” > 文本值是新闻的元素
xpath=”//a[contains(text(),‘新闻’)]” > 文本值包含新闻的元素

(3)link_text()
(4)CSS定位
(5)定位半天不出来??? >>> 右键xpath试下
(6)还不出来??? >>> js定位试下

7、如何调测测试用例

7.1 点击测试用例前面的 绿色箭头

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6zzWQuW-1645622647062)(img_6.png)]

7.2 将pycharm执行用例的方法默认为pytest

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QHaXEUxS-1645622647062)(img_5.png)]

8、如何录制脚本

8.1 Katalon Recorder

  • 1、谷歌安装网址:https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid
  • 2、导出脚本:Export => Python 2 (WebDriver + unittest) => Save As File
  • 3、转换脚本为sbase脚本:sbase convert MY_TEST.py, 生成文件 MY_TEST_SB.py

8.2 selenium IDE

  • 安装:https://www.selenium.dev/selenium-ide/

9、如何将脚本一键转换为中文版本用例

  • 转成中文,并复制
    sbase translate test_专家管理.py --zh -c
  • 转成中文,打印到界面
    sbase translate test_专家管理.py --zh -p
  • 转成中文,并替换
    sbase translate test_专家管理.py --zh -overwrite
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,针对图书馆管理系统,我们可以编写以下测试用例: 1. 用户登录功能测试用例- 输入正确的用户名和密码,登录成功 - 输入不存在的用户名和密码,提示错误信息 - 输入正确的用户名但错误的密码,提示错误信息 2. 图书查询功能测试用例- 按书名查询,查询结果正确 - 按作者查询,查询结果正确 - 按出版社查询,查询结果正确 - 输入不存在的关键字查询,提示查询结果为空 3. 图书借阅功能测试用例- 图书可借阅,借阅成功 - 图书不可借阅,借阅失败 - 借阅同一本书超过规定的借阅天数,产生逾期罚款 - 逾期罚款产生后,不能再借阅其他书籍 4. 图书归还功能测试用例- 图书已借出,归还成功 - 图书未借出,归还失败 - 归还同一本书超过规定的归还天数,产生逾期罚款 - 逾期罚款产生后,不能再借阅其他书籍 5. 用户信息管理测试用例- 用户信息正确修改成功 - 用户信息删除成功 - 用户信息添加成功 6. 图书信息管理测试用例- 图书信息正确修改成功 - 图书信息删除成功 - 图书信息添加成功 7. 系统安全性测试用例- 输入非法字符,系统能够正确响应并提示错误信息 - 输入SQL注入代码,系统能够正确拦截并提示错误信息 - 输入恶意脚本,系统能够正确拦截并提示错误信息 以上是一些基本的测试用例,具体测试用例的编写还需要根据实际情况进行补充。同时,我们需要注意对测试用例的覆盖率,尽可能覆盖到系统的所有功能和场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值