zoukankan      html  css  js  c++  java
  • Web自动化测试代码优化方案之定位、操作

    UI自动化测试时,无非是元素定位、对象操作、逻辑验证,但经常出现定位不到元素问题,导致整个用例失败,是一个头疼的问题,那有什么好的解决方案呢?

    元素定位

    一般采用隐式等待、显式等待,但有时还不能符合我们的要求,所以我用的解决方案是做了一次封装,采用try:except包括定位元素,如果定位失败,采用第二种方式进行定位

    def find_element(self, *loc, xpath=None):
              """        *loc:表示定位方式、定位元素
              xpath:通过xpath方式定位        return:定位到的元素对象
              """ 
             try: 
                   return WebDriverWait(self.driver, 20, 2).until(EC.presence_of_element_located(loc))
              except TimeoutException:
                    try: 
          return WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath))) 
                   except TimeoutException: 
                         print('元素%s不存在' % loc)
    

    使用方式也很简单,直接调用即可,如果ID方式无法定位到元素,采用xpaht方式进行定位

      def select_checkbox(self): 
               self.find_element(By.ID, 'checkbox-0-s', xpath='//*[@id="checkbox-0-s"]').click()
    
    对象操作

    常见的操作是对元素进行点击,但有的元素明明是已经被点击,但未生效,针对这种现象,我同样做了封装

    def find_element_click(self, *loc, s=3):
              """定位元素并进行点击操作""" 
             ele = self.find_element(*loc) 
             ele.click() 
             time.sleep(2)
              try: 
                   WebDriverWait(self.driver, s).until(EC.presence_of_element_located(loc)).click() 
             except TimeoutException: 
                   pass
    

    先对元素进行定位,定位到元素后进行点击操作,再次定位该元素,如果再次定位到再次进行点击操作,反之结束操作

    缺点:这个封装只针对特定元素,如果遇到首页搜索按钮的点击,该封装不适用,后续会考虑优化,你有好的解决办法吗?欢迎公众号内回复

  • 相关阅读:
    Eclipse里编辑代码,进度条出现“Remote System Explorer Operation”解决方法
    Fiddler快速入门
    十分钟学会 Fiddler
    网络抓包工具 wireshark 入门教程
    wireshark使用教程
    Apple iOS MDM开发流程
    input file 文件上传,js控制上传文件的大小和格式
    读取注册表获取Windows系统XP/7/8/10类型(使用wcscmp比较wchar[]内容)
    QT 序列化/串行化/对象持久化
    VC 使用msxml6.dll动态链接库中的函数读写XML文件
  • 原文地址:https://www.cnblogs.com/ptest/p/11646686.html
Copyright © 2011-2022 走看看