最近开始学习用python使用selenium写前端自动化用例,过程中遇到一个问题。
使用断言设置检查点,断言失败了,但是用例结果为PASS。原来的代码结构如下:
def test_Create_Role(self):
self.driver.get(URL)
try:
# 创建角色
self.driver.find_element_by_xpath('//input[@name="roleName"]').send_keys(self.ROLE_NAME)
self.driver.find_element_by_xpath('//textarea[@name="description"]').send_keys("Selenium auto create.")
self.wait.until(
EC.visibility_of_element_located(
(By.XPATH, '//button[text()="创建角色"]'))
).click()
is_element_exist = Is_Element_Exist(self.driver, By.XPATH,
'//span[contains(text(), "已创建")]').is_element_Exist_Wait()
logger.info("Create role status is %s" % is_element_exist)
self.assertTrue(is_element_exist == True, "Create role failed")
except Exception as e:
logger.error(e)
其中调用了一个自定义类的函数:is_element_Exist_Wait,而后用assertTrue设置检查点。测试时修改了元素定位的字符串,使检查结果失败。查看到assert与预期相符。但是使用HTMLTestRunner查看到结果为pass.
原来是因为我把断言语句放到了try语句下面,导致被except中定义的异常类捕获,最后运行完就没有异常了。
修改后的代码就没有问题了:
def test_Create_Role(self):
self.driver.get(URL)
self.driver.find_element_by_xpath('//input[@name="roleName"]').send_keys(self.ROLE_NAME)
self.driver.find_element_by_xpath('//textarea[@name="description"]').send_keys("Selenium auto create.")
self.wait.until(
EC.visibility_of_element_located(
(By.XPATH, '//button[text()="创建角色"]'))
).click()
is_element_exist = Is_Element_Exist(self.driver, By.XPATH,
'//span[contains(text(), "已创建")]').is_element_Exist_Wait()
logger.info("Create role status is %s" % is_element_exist)
self.assertTrue(is_element_exist == True, "Create role failed")
看来不能把断言放到try语句中并且是可以被except的异常类包含的,否则就不能通过断言来设置测试用例的结果。