appium+python实战五:参数化和元素判断进阶

测试用例数据比较多时,一般就不会采用@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',这样元素不存在时会导致数组越界。

你可能感兴趣的:(UI自动化)