文章目录
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
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)
- 优化后的元素要查看是否定位到
- 有些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 点击测试用例前面的 绿色箭头
7.2 将pycharm执行用例的方法默认为pytest
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