• 留个言🌚 🌚

  • 😌 报名的来顶个~

  • #8 楼 @xiaoafeizt
    如果是要依次执行,直接用平行的 try-except 就好

    try:
        driver.find_element_by_name('允许').click()
    except NoSuchElementException:
        pass
    try:
        driver.find_element_by_name('切换').click()
    except NoSuchElementException:
        pass
    try:
        driver.find_element_by_id('com.tuniu.app.ui:id/iv_close').click()
    except NoSuchElementException:
        pass
    try:
        driver.find_element_by_id('com.tuniu.app.ui:id/iv_style3_card_1').click()
    except ...
    

    不过这样写的话 中间有报错的会直接跳过,你的操作依赖步骤的话可能会导致后续操作失败

  • 应该这样写

    try:
        driver.find_element_by_name('允许').click()
    except NoSuchElementException:
        try:
            driver.find_element_by_name('切换').click()
        except NoSuchElementException:
            try:
                driver.find_element_by_id('com.tuniu.app.ui:id/iv_close').click()
            except NoSuchElementException:
                try:
                    driver.find_element_by_id('com.tuniu.app.ui:id/iv_style3_card_1').click()
                except ...
    

    多重 try-except 嵌套

    你的写法 except 之间是并列的,尝试捕获的都是driver.find_element_by_name('允许').click()的异常,
    所以第二个driver.find_element_by_name('切换').click()仍会抛出异常

  • 人生苦短,我用 python

  • 因为嫌 HTMLTestRunner 的报告风格太丑,所以我自己用 bootstrap 写了个测试报告模板

    在每个测试进行的时候将测试编号、名称、结果、耗时以及想要返回的内容直接保存之后再将对应内容填充到测试报告的模板中形成测试报告,感觉还是比 HTMLTestRunner 的美观些

    如下图 灰色部分默认是隐藏的点击查看可以展开

  • #7 楼 @xie_0723

    对 就是想达到类似的效果,目前来看,还是直接在 PO 封装常用方法 然后用某个关键字进行调用这样实现吧,好在我们的页面功能都还比较简单

  • #4 楼 @xie_0723

    感谢回答!

    我目前做的并没有做层层递进,App_page_object 类中封装了测试用例解析、元素定位、动作执行等公用的方法,对页面本身则会封装该页面全部或常用元素,为了用例表述的更像自然语言,对各控件名称和变量做了映射,同时,某些页面有特殊性,不适用的公共方法也会进行重写,常用操作这块目前没有做封装

    总的来说 当需求发生变更,页面变更则更新 PO 本身属性,即各控件的定位方法,逻辑更新则直接更新用例 相当于只分为了逻辑层和页面属性层

  • #3 楼 @Lihuazhang

    指的是 封装常用的业务逻辑 这个么

  • #1 楼 @Lihuazhang

    嗯,我之前也考虑不在用例中输入实际数据,而是用某个或某类关键字代替,执行时根据关键字自动生成或者从某处 取得数据,然后感觉这样实现起来成本太高。

    另一个考虑就是直接在 page object 中封装常用的业务逻辑,这样只要传入所需参数就能执行某一个业务逻辑。

    不知道您手头又没有在做 web 自动化这块,可否分享下您项目是如何进行的?