测试用例数据比较多时,一般就不会采用@pytest.mark.parametrize()直接指定这种方式来 定义数据,会采取外部文件来存储用例数据,通过读取外部文件实现数据的传入。
test_data = yaml.safe_load(open('../../../data/parameter/export_pdf.yaml','r',encoding='utf-8'))
@pytest.mark.parametrize(
"color,size,mark,name", test_data,
ids=["case1", "case2", "case3", "case4", "case5"]
)
def test_watermark_file_export(self, color, size, mark, name):
AdbShellUtils(driver).start_pub_activity()
cloud_page = RootPage(driver).switch_cloud_tab()
cloud_page.choose_writer_normal_file().click()
page = WriterHomePage(driver).click_tool().click_export_pdf()
watermark_page = page.click_watermark_button()
watermark_page.choose_color(color)
watermark_page.set_process(size)
watermark_page.click_tile()
watermark_page.choose_watermark(mark)
watermark_page.click_ok()
save_page = page.click_export_pdf_button()
save_page.input_file_name(name)
save_page.click_save_button()
assert page.get_export_status_phone() == True
定位元素时会时常遇到这种场景:虽然定位到了元素,但当时控件可能还处于置灰不可点击状态,如果只是单单通过判断定位到元素就执行点击操作的话,会导致后续定位错误。因此,在一些“待加载完成才可点击”的场景下,不只是要判断元素是否可见,还要判断元素的enabled状态,当enabled为True时才可执行点击操作。
在代码中我是把它抽调在基本page函数里,方便其它page调用。
def is_element_enabled(self,mode,located,time = 5):
def locat(driver):
el = self.driver.find_elements(mode,located)
if el.__len__() >= 1:
status = el[0].get_attribute('enabled')
if status == 'true':
return True
else:
return False
else:
return False
try:
WebDriverWait(self.driver,time).until(locat)
return True
except TimeoutException:
return False
另外这里需要注意的是,元素是否可见和enabled是否为True虽然是‘且’关系,但在代码中不能写成el.__len__() >= 1 and el[0].get_attribute('enabled') == 'true'
,这样元素不存在时会导致数组越界。