• 可以理解,谢谢,已经解决了第二个问题。

  • bearer token

  • 请求后端的数据与页面显示做对比,不是可以测 ui 吗

  • 当我在 web 端发起请求,header 需要鉴权信息时,我如何知道鉴权信息是多少呢?【前提,正处于 ui 自动化测试中】

  • 请问 UI 自动化测试和接口测试结合,怎么获取 authorization 呢?

    我反复思考了很久,觉得

    获取接口的数据,成本好像更高

  • request 如何和 selenium 结合呢,在必须传入 header 的情况下

  • 您好,您的意思是 UI 自动化测试和接口测试结合吗,使用 request 吗

  • 抱歉,我觉得不太合适我现在的状况。

  • 好的,谢谢。

    这个占位符是使用赋值的方法将其改变吗?

    如果是赋值,我觉得页码元素定位和页面功能分开可能耦合性更低一点,所以没有用这个方法,否则我之前也是用的这个方法

  • 可是空搜索就是有很多页,总数据本来就有几百条,您的意思是我把其他页删掉吗

  • 假设 class 每次都会改变,这个情况该如何处理呢,比如第一次是 el-table_1_column_1 ,第二次是 el-table_2_column_7 ,确认是同一行同一列

    并且很好奇,这个占位符是如何在实例化该元素时替换掉的呢

  • 搜索为空的用例结果,是出现所有结果,这个情况下,只验证第一页的结果,这个意思吗

  • 您好

    1. 搜索为空,作为独立用例时,如何验证呢?是否要逐页点击确认,当点击第二页,即发生了点击新页面事件,这时获取到的列表如果是重新排序过的,可能会验证失败。我觉得测试场景设计确实要优化,但是对于测试结果还是需要验证的。

    2. 每一列的 class 每次点击都会变化,这种情况,我如何获取每一排每一列的文本信息呢(直接 driver 我知道,但是我不知道如何结合 page object 模式来做,因为要封装 selenium 原生方法不是吗)

    3. 您说的对。

  • 因为用例需要做检查点校验。至于 for 循环,你做抽样的话就不用循环了,固定写死 2-3 个位置就好。

    1.请问抽样是什么意思呢?我之前没有接触过。是接口测试里面的吗?对比相同参数请求接口的返回值是什么意思呢

    2.固定写死是否会导致只测到这几个位置,其他位置有问题呢?比如现在由于测试环境数据库存在脏数据,1、2、3 页都没有问题,后面几页才出现问题。

    3.区别其实我也不太清楚,但是我知道将 driver 的方法封装,ui 测试失败率大大降低了,所以我觉得应该封装,另外重复的代码减少了。模拟封装的话可能是

    def get_elements_by_element(el, *loc):
        child_el = el.find_elements(*loc)
        return child_el
    
    def get_element_text_by_el(el):
        text = el.text
        return text
    # (里面存在try except对异常的处理)
    # 从传入loc -> 变成传入element 
    # 第一个函数可以获取一个元素的子元素,但是我也考虑到它是element的方法,不是driver的方法
    
    

    用例中如下:

    # ①没有对异常的处理
        row_ele.find_element(*loc.column_1_loc).text
    # ②
        column_ele = self.find_elements_by_element(row_ele, *loc.column_1_loc)[0]
        column_1_text = self.get_element_text_by_el(column_ele)
    

    PS: 您说的对,我问清楚了,这些都是服务器问题,已经和领导沟通 ui 和接口分开做。

    4.将 UI 上的数据和从接口获取的数据结合,那么接口如何请求呢,selenium?request?

  • 想问您一个封装的问题,在 BasePage 中已有封装
    其他封装的方法都是依据它来的,如:
    请问还需要封装 element.find_element 方法和 get_element_text_by_element 方法吗

  • 1.用例存在空搜索,即搜索内容为空时,点击搜索,这个情况出来的是全部的,需要一个一个比对,因为之前出过每次点击一个新页面都重新排序的 bug
    2.每一排都有一个 class,我可以很好的定位列表的每一排,但是无法定位每一列【列没有固定的 class,只有一个 tag td】,如果需要定位的话,需要这样

    row_element.find_elements((By.TAG, "td"))
    

    这样的话需要对每一个进行解析,没有封装 element.find_element 方法,而且如果封装了的话,由于要获取其中的 text,还需要封装 get_element_text_by_element.因为之前封装的 get_text 是通过定位获得的
    3.我明白验证需要放到用例中,但是是否可以在页面功能类中添加方法,对比不用 assert,而是用 if,如果不对,返回 False 呢,如果全放到用例中,两个列表对比,肯定是要 for 循环,放到用例中感觉又不太合适

  • 请问这个和 PO 模式结合的时候,需要重写 BasePage,肯定需要用到通过元素查找元素,并获取元素的 text,这个该怎么封装呢?
    我之前已经封装了通过 location 获取元素文本等了。

  • 您好,您的意思是直接做接口测试吗

  • WebDriverWait(driver, 10).until(expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,"#TANGRAM__PSP_10_error")), msg=u'请您填写手机/邮箱/用户名')
    

    注意括号

  • 好的,刚刚用您的建议尝试了一下,最终:

    1. url 的判断在封装的 driver 中,每次只需在setUpClass中初始化 url 即可

    2.用例失败时的截图在 TestResult中完成

    3.用例错误时的截图我还是写了一个装饰器,原因是BasePage中已经封装了截图功能,在BasePage的每个函数中都引用了这个函数,要改动的地方比较大,装饰器只需要在封装截图函数处加一个 @ 即可。

  • 因为自动化刚起步,而且只有我自己做,暂时还没有落地,肯定要盯着看看效果。

    刚刚我试了一下,addFailure会在tear down后面执行,如果这样的话,是否有一个问题,tear down不允许 refresh。

  • 您说的对,我做这个是为了改善重跑机制中如果用例使用了两个页面,跳转到第二个页面中时发生错误即使重跑也没有用的问题。

    PS:不太好是觉得看着它一直刷新,领导会一脸???o( ̄┰ ̄*) ゞ不好意思

  • 我尝试在 addFailure 中截图,但是令人失望的是,它截图好像截的是在函数 tear down 之后的,我看不到真正发生错误时的图片,这是为什么呢

  • 为什么要做判断是因为,每次测试之后都会 refresh 一下,这样会导致刷新两次,另外进入整个系统之前会 get url,那么第一个运行的用例也会 get url 两次,两次刷新/get url,我觉得不太好。所以判断一下比较好,我目前做的是使用一个装饰器,将其装饰到可能会涉及两个页面的用例上。

    截图也是使用一个装饰器,装饰到在 Base Case 中重写的 assert*** 函数上,但是这样可能有不好的地方,我觉得截图还是放到 Runner 中更好。

  • 您好,请问我之前有使用过这个问题解决 app 上通过图像识别点击或者判断元素状态的问题,但是在答辩的时候,有公司的同事提出分辨率的问题,这该怎么办呢?