在实际自动化测试过程中常常遇到以下几个问题
定位方式
通用场景
特殊场景
与研发约定的属性优先(class属性:?[name='locate']
)
身份属性 id,name(web 定位)
复杂场景使用组合定位:
js定位
场景
解决:
driver.switch_to().alert()
?处理场景:
<input>
标签组合的下拉框无法定位<input>
标签组合的日期控件无法定位解决:
场景:
解决:
为什么要添加等待
time.sleep(3)
强制等待的缺点
def click_none():
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(3)
driver.get("https://vip.ceshiren.com/#/ui_study")
driver.find_element(By.ID, "success_btn").click() # 点击未触发效果
time.sleep(5)
driver.quit()
隐式等待无法解决的问题
元素可以找到,使用点击等操作,出现报错
原因:
解决方案:使用显式等待
WebDriverWait(driver对象,最长等待时间).until()
类型 | 使用方式 | 原理 | 适用场景 |
---|---|---|---|
直接等待 | time.sleep(等待时间)) | 强制线程等待 | 调试代码,临时性添加 |
隐式等待 | driver.implicitly_wait(等待时间) | 在时间范围内,轮询查找元素 | 解决找不到元素问题,无法解决交互问题 |
显式等待 | WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件) | 设定特定的等待条件,轮询操作 | 解决特定条件下的等待问题,比如点击等交互性行为 |
用例标题 | 前提条件 | 用例步骤 | 预期结果 | 实际结果 |
---|---|---|---|---|
测试人搜索功能 | 进入测试人论坛首页 | 1. 点击搜索按钮2. 输入搜索关键词3. 点击搜索按 | 1. 搜索成功2. 搜索结果列表包含关键字 |
自动化测试也是功能测试的一部分,我们会挑选一些核心的功能来做自动化测试
自动化测试无需编写测试用例,直接使用已有的功能测试用例就可以了
class UIBase:
driver = webdriver.Chrome()
def setup_class(self):
self.driver.maximize_window()
self.driver.implicitly_wait(5)
def teardown_class(self):
self.driver.quit()
# 用例标题=文件名+类名+方法名
class TestCeshiren(UIBase):
def setup_method(self):
# 前提条件:进入测试论坛首页
self.driver.get("https://ceshiren.com/search?expanded=true")
def test_search(self):
"""测试搜索功能"""
# 测试步骤
# 1、搜索框中输入
el01 = self.driver.find_element(By.CSS_SELECTOR, "[placeholder='搜索'")
el01.send_keys("appium")
# 2、点击搜索按钮
el02 = self.driver.find_element(By.CSS_SELECTOR, ".btn-primary.search-cta.btn.btn-icon-text")
el02.click()
# time.sleep(5)
# 3、断言 搜索结果中有appium关键字
el03 = self.driver.find_element(By.CSS_SELECTOR, ".search-highlight")
# print(el03.text)
assert "appium" in el03.text.lower()
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!