Appium 自动化测试演示-阿里云开发者社区

开发者社区> 沉默术士> 正文

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("//window[1]/tableview[1]/cell[1]/button[1]"))
click(wd.find_element_by_name(" 返回"))
click(wd.find_element_by_xpath("//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("//window[1]/image[2]/textfield[1]"), "lvtu@yopmail.com")
send_keys(wd.find_element_by_xpath("//window[1]/image[3]/secure[1]"), "lvtu@yopmail.com")
click(wd.find_element_by_name("登录"))
try:
click(wd.find_element_by_xpath("//window[1]/button[3]"))
except:
logging.info('没上传提示')
click(wd.find_element_by_xpath("//window[1]/tableview[1]/cell[1]/text[1]"))
click(wd.find_element_by_xpath("//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("//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')


最新内容请见作者的GitHub页:http://qaseven.github.io/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【转】android如何实现开机自动启动Service或app
1.今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤: 2. 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。
911 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10069 0
scrapy自动多网页爬取CrawlSpider类(五)
一.目的。 自动多网页爬取,这里引出CrawlSpider类,使用更简单方式实现自动爬取。 二.热身。 1.CrawlSpider (1)概念与作用: 它是Spider的派生类,首先在说下Spider,它是所有爬虫的基类,对于它的设计原则是只爬取start_url列表中的网页,而从爬取的网页中获取link并继续爬取的工作CrawlSpider类更
4661 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13879 0
自动化日志收集及分析在支付宝 App 内的演进
作者:曲仁军(骁然),蚂蚁金服技术专家。本文将聚焦支付宝在移动端如何构建日志自动化采集和分析能力,从而通过“数据采集、计算、分析、决策”完成针对业务性能的监控与用户行为分析。
3116 0
让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析
mPaaS 小程序框架作为一款 App 通用框架,帮助开发者面向自身的 App 实现小程序投放。不止如此,小程序代码仅需撰写一次,便可多端投放至自有 App、支付宝、钉钉甚至其他小程序开放平台。
1776 0
webpack vue app.js自动注入页面.为app.js增加随机参数
node_modules/html-webpack-plugin/index.js 搜索 postProcessHtml 修改代码增加如下: if (assetTags && assetTags.body && assetTags.
940 0
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
基本原理: JDK6u10版本以上提供了DeskTop的API接口支持,可以根据URI参数自动打开 操作系统默认的浏览器来加载对应的网页,同时借助JDK的Robot类实现自动截屏 这样就完成了对任意一个URL对应网页保存为图片。
991 0
+关注
5518
文章
253
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载