qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Appium 自動化測試演示

           經驗就是:
            每兩次操作之間,一定要間隔幾秒,不然可能會由于加載不完全,導致操作異常
            初始隱藏的控件,要判斷狀態,等顯示后再操作
            最后輸出:
            測試截圖的相似度百分比(之前某一次結果),用來做正確性驗證,基本上相似度小余90%的都有點問題
            http://v.youku.com/v_show/id_XNjM0ODIxNTUy.html
            密碼:testerhome.com
            PS:原來不支持嵌入視頻啊
            相似度計算是看的 http://blog.csdn.net/gzlaiyonghao/article/details/2325027
            現在搞不太清楚的就是怎么判斷當前的位置,是在什么窗口下面,和如何打印出當前位置的所有控件
          # coding:utf8
          import logging
          import histsimilar
          import traceback
          import time
          import os
          from selenium import webdriver
          from selenium.common.exceptions import NoSuchElementException, WebDriverException
          logging.basicConfig(filename='log.txt',level=logging.INFO)
          success = True
          desired_caps = dict()
          desired_caps['browserName'] = 'iOS'
          desired_caps['platform'] = 'Mac'
          desired_caps['version'] = '6.1'
          desired_caps['app'] = os.path.abspath('測試app的位置')
          #def is_alert_present(wd):
          #    try:
          #        wd.switch_to_alert().text
          #        return True
          #    except:
          #        return False
          def click(element):
          element.click()
          time.sleep(3)
          logging.info(str(c) + ' time click ' + wd.page_source)
          screenshot()
          def send_keys(element, keys):
          element.send_keys(keys)
          time.sleep(3)
          logging.info(str(c) + ' time click ' + wd.page_source)
          screenshot()
          def execute_script(script, args):
          wd.execute_script(script, args)
          time.sleep(3)
          screenshot()
          def mk_new_dir():
          global path, base
          base = '截圖存放的位置'
          if not os.path.isdir(base):
          path = base + '0/'
          os.mkdir(path)
          return
          path = base + str(len(os.listdir(base))) + '/'
          c = 0
          def screenshot():
          global c, path
          if not os.path.isdir(path):
          os.mkdir(path)
          wd.get_screenshot_as_file(path + str(c) + '.png')
          c += 1
          def compare():
          dirs = list()
          for dirname in os.listdir(base):
          if os.path.isdir(base + dirname):
          dirs.append((os.path.getmtime(base + dirname), dirname))
          if len(dirs) < 3:
          return
          dirs.sort()
          new = dirs[len(dirs) - 1][1]
          previous = dirs[len(dirs) - 2][1]
          names = [(os.path.getmtime(base + new + '/' + filename), filename) for filename in
          os.listdir(base + new)]
          names.sort()
          for n in names:
          if n[1].startswith('.'):
          continue
          if os.path.exists(base + previous + '/' + n[1]):
          print n[1] + ' similarity : ' + str(
          int(histsimilar.calc_similar_by_path(base + new + '/' + n[1],
          base + previous + '/' + n[1]) * 100)) + '%'
          try:
          mk_new_dir()
          wd = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps)
          wd.implicitly_wait(5)
          try:
          button = wd.find_element_by_name('點擊開啟')
          while not button.is_displayed():
          #screenshot()
          time.sleep(1)
          time.sleep(3)
          click(button)
          except WebDriverException, NoSuchElementException:
          logging.info('沒有開機動畫')
          click(wd.find_element_by_xpath("http://window[1]/tableview[1]/cell[1]/button[1]"))
          click(wd.find_element_by_name(" 返回"))
          click(wd.find_element_by_xpath("http://window[1]/tableview[1]/cell[1]/button[2]"))
          click(wd.find_element_by_name(" 返回"))
          click(wd.find_element_by_name("游記"))
          click(wd.find_element_by_name("qunar login"))
          send_keys(wd.find_element_by_xpath("http://window[1]/image[2]/textfield[1]"), "lvtu@yopmail.com")
          send_keys(wd.find_element_by_xpath("http://window[1]/image[3]/secure[1]"), "lvtu@yopmail.com")
          click(wd.find_element_by_name("登錄"))
          try:
          click(wd.find_element_by_xpath("http://window[1]/button[3]"))
          except:
          logging.info('沒上傳提示')
          click(wd.find_element_by_xpath("http://window[1]/tableview[1]/cell[1]/text[1]"))
          click(wd.find_element_by_xpath("http://window[1]/tableview[1]/cell[1]"))
          execute_script("mobile: swipe",
          {"touchCount": 1, "startX": 157, "startY": 529, "endX": 156, "endY": 102, "duration": 0.5})
          click(wd.find_element_by_name(" 返回"))
          click(wd.find_element_by_name(" 返回"))
          click(wd.find_element_by_xpath("http://window[1]/button[1]"))
          except:
          traceback.print_exc()
          success = False
          finally:
          if success:
          #raise Exception("Test failed.")
          compare()
          wd.quit()



           計算圖片相似度部分
          # -*- coding: utf-8 -*-
          import Image
          def make_regalur_image(img, size=(256, 256)):
          return img.resize(size).convert('RGB')
          def split_image(img, part_size=(64, 64)):
          w, h = img.size
          pw, ph = part_size
          assert w % pw == h % ph == 0
          return [img.crop((i, j, i + pw, j + ph)).copy() \
          for i in xrange(0, w, pw) \
          for j in xrange(0, h, ph)]
          def hist_similar(lh, rh):
          assert len(lh) == len(rh)
          return sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r)) for l, r in zip(lh, rh)) / len(lh)
          def calc_similar(li, ri):
          #   return hist_similar(li.histogram(), ri.histogram())
          return sum(hist_similar(l.histogram(), r.histogram()) for l, r in zip(split_image(li), split_image(ri))) / 16.0
          def calc_similar_by_path(lf, rf):
          li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))
          return calc_similar(li, ri)
          def make_doc_data(lf, rf):
          li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))
          li.save(lf + '_regalur.png')
          ri.save(rf + '_regalur.png')
          fd = open('stat.csv', 'w')
          fd.write('\n'.join(l + ',' + r for l, r in zip(map(str, li.histogram()), map(str, ri.histogram()))))
          #   print >>fd, '\n'
          #   fd.write(','.join(map(str, ri.histogram())))
          fd.close()
          import ImageDraw
          li = li.convert('RGB')
          draw = ImageDraw.Draw(li)
          for i in xrange(0, 256, 64):
          draw.line((0, i, 256, i), fill='#ff0000')
          draw.line((i, 0, i, 256), fill='#ff0000')
          li.save(lf + '_lines.png')

          posted on 2013-12-19 11:06 順其自然EVO 閱讀(980) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大方县| 澳门| 海原县| 喀什市| 西宁市| 汝州市| 罗山县| 拉萨市| 浦北县| 册亨县| 佛教| 吉林省| 姚安县| 井研县| 贺兰县| 肃南| 平利县| 洮南市| 平陆县| 吉木乃县| 改则县| 儋州市| 醴陵市| 霍林郭勒市| 东山县| 旬邑县| 章丘市| 皮山县| 龙口市| 陇川县| 灯塔市| 萨嘎县| 昌图县| 清水县| 南涧| 安远县| 盐亭县| 瑞丽市| 息烽县| 江达县| 聂拉木县|