Appium 作业 1
根据课堂视频,安装搭建Appium运行环境,并运行示例代码
安装Appium Python Client 包
安装Appium Python Client 包的命令
pip install Appium-Python-Client
安装 Appium Server
下载安装Appium Desktop的安装包, 下载地址 https://github.com/appium/appium-desktop/releases/latest 下载扩展名为.exe的包
安装 Android Studio
官方中文网站 https://developer.android.google.cn/studio/archive.html 选择2.3.3 版本,包含了sdk的安装包 Windows IDE bundle with SDK (64-bit)
特别注意,安装程序要求路径中最好不要有空格。
安装JDK
到 oracle 官方网站下载JDK 1.8 的安装包,进行安装
安装安卓模拟器
先试试android studio里面自带的模拟器
打开 studio,创建一个项目,通过tools - android - AVD Manager菜单创建一个安卓模拟设备
如果不行,可以试试Genymotion,安装过程参考 https://github.com/jcyrss/songqin-testdev/issues/3
运行自动化测试
- 运行虚拟机,下载开发者头条应用,http://toutiao.io/s/apk
安装到虚拟机中并运行;
注册一个账号 - 根据课堂教学视频,运行Appium Server,并设置、启动服务
- 下载自动化脚本https://github.com/jcyrss/songqin-testdev/blob/master/appium/src/lesson1/toutiao_login.py 修改其中用户名,密码为你注册的账号,运行脚本完成一个自动登录功能
-
dfgdfg
Appium 作业 2
- 到如下网址下载 多多计算器
https://github.com/jcyrss/songqin-testdev/raw/master/appium/uploads/duoduoCalculators.apk
- 用 aapt.exe 命令查看 apk包的 appPackage 信息和 主 Activity 信息
- 用 UIAutomator Viewer 查看应用界面元素信息
- 编写python程序,完成一个 计算 3+9 ,结果 再乘以5 的自动化功能. 最后判断计算结果是否为60,如果是,测试通过;否则测试不通过
-
# coding=utf8 from appium import webdriver import time,traceback desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '6' desired_caps['deviceName'] = 'test' desired_caps['app'] = r'd:apkduoduoCalculators.apk' desired_caps['appPackage'] = 'com.ibox.calculators' desired_caps['appActivity'] = '.SplashActivity' desired_caps['unicodeKeyboard'] = True desired_caps['noReset'] = True desired_caps['newCommandTimeout'] = 6000 #启动Remote RPC driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) driver.implicitly_wait(10) try: # ----------------- num3 = driver.find_element_by_id("com.ibox.calculators:id/digit3") num5 = driver.find_element_by_id("com.ibox.calculators:id/digit5") num9 = driver.find_element_by_id("com.ibox.calculators:id/digit9") plus = driver.find_element_by_id("com.ibox.calculators:id/plus") mul = driver.find_element_by_id("com.ibox.calculators:id/mul") equal = driver.find_element_by_id("com.ibox.calculators:id/equal") num3.click() plus.click() num9.click() equal.click() mul.click() num5.click() equal.click() # 检查结果,需要我们去找结果对应的界面元素,发现是下面这个TextView # 研究发现没有特点,大家想想我们该怎么办 # 可以看看父节点有没有唯一标识,发现 父节点是有id的, # 就可以怎么样? # 先查找父节点, # 再根据父节点元素 调用 find element 就是在父节点的范围内 查找 retLayout = driver.find_element_by_id('com.ibox.calculators:id/cv') retTvs = retLayout.find_elements_by_class_name('android.widget.TextView') retStr = retTvs[1].text print(retStr) if retStr == '60': print('pass') else: print('fail') # ----------------- except: print(traceback.format_exc()) input('**** Press to quit..') driver.quit()
Appium 作业 3
-
找到一个安卓设备(没有可以向朋友借用一下),将其连接到电脑上,根据课堂视频指导,确保可以被命令
adb devices -l
检测到 -
安装多多计算器(怎么装?自己想办法)
-
练习用 Appium Desktop中的 inspector查看界面。
-
将上次作业,用xpath方式定位元素,再实现一遍
-
-
# coding=utf8 from appium import webdriver import time,traceback desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '7.1' # desired_caps['deviceName'] = 'test' desired_caps['app'] = r'd:apkduoduoCalculators.apk' desired_caps['appPackage'] = 'com.ibox.calculators' # desired_caps['appActivity'] = 'com.ibox.calculators.SplashActivity' desired_caps['unicodeKeyboard'] = True desired_caps['noReset'] = True desired_caps['newCommandTimeout'] = 6000 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) driver.implicitly_wait(10) try: # ----------------- num3 = driver.find_element_by_id('com.ibox.calculators:id/digit3') num9 = driver.find_element_by_id('com.ibox.calculators:id/digit9') num5 = driver.find_element_by_id('com.ibox.calculators:id/digit5') plus = driver.find_element_by_id('com.ibox.calculators:id/plus') equal = driver.find_element_by_id('com.ibox.calculators:id/equal') mul = driver.find_element_by_id('com.ibox.calculators:id/mul') num3.click() plus.click() num9.click() equal.click() mul.click() num5.click() equal.click() # ---------------------- xpath = '//*[@resource-id="com.ibox.calculators:id/cv"]/android.widget.TextView[2]' ele = driver.find_element_by_xpath(xpath) retStr = ele.text # ---------------------- print(retStr) if retStr == '60': print('pass') else: print('fail!') # ----------------- except: print(traceback.format_exc()) input('**** Press to quit..') driver.quit()
Appium 作业 4
-
找到一个安卓设备(没有可以向朋友借用一下)
-
到华为官网 http://app.hicloud.com/ ,微信扫码右侧二维码,安装华为应用市场apk,
如果手机安装后不能打开的,可以点击这里下载老版本安装,老版本安装运行后,不要选择更新到新版本。
-
进入排行页面,滚动到 口碑最佳 部分
-
打印出所有 口碑最佳 部分的5个应用名称
-
-
# coding=utf8 from appium import webdriver import time import traceback desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '6' desired_caps['deviceName'] = 'test' desired_caps['app'] = r'd:apkHiSpace.apk' desired_caps['appPackage'] = 'com.huawei.appmarket' #app package名,指定了要运行的app desired_caps['appActivity'] = 'com.huawei.appmarket.MainActivity' #app默认Activity desired_caps['unicodeKeyboard'] = True desired_caps['noReset'] = True desired_caps['newCommandTimeout'] = 6000 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #启动Remote RPC driver.implicitly_wait(10) try: # ------------------------------ javaCode = 'new UiSelector().resourceId("com.huawei.appmarket:id/tabLayout").childSelector(new UiSelector().text("排行") )' driver.find_element_by_android_uiautomator(javaCode).click() javaCode = 'new UiSelector().text("总榜").resourceId("com.huawei.appmarket:id/ItemTitle")' ele = driver.find_element_by_android_uiautomator(javaCode) destPosY = ele.location['y'] xPos = ele.location['x'] driver.implicitly_wait(0.5) while True: driver.swipe(xPos,destPosY,xPos,destPosY-100, 1000) javaCode = 'new UiSelector().text("口碑最佳").resourceId("com.huawei.appmarket:id/ItemTitle")' eles = driver.find_elements_by_android_uiautomator(javaCode) if not eles: continue driver.swipe(xPos,eles[0].location['y'],xPos,destPosY,3000) break driver.implicitly_wait(10) eles = driver.find_elements_by_class_name("android.widget.TextView") tvs = [] for ele in eles: tvs.append(ele.text) tvsStr = '|||'.join(tvs) pos1 = tvsStr.find('口碑最佳|||') targetStr = tvsStr[pos1:] def getName(No): #'1', '2' tp1 = targetStr.find(No+'|||') + 4 tp2 = targetStr.find('|||',tp1) return targetStr[tp1:tp2] print('================ finally ++++++++++++ ') for i in range(1,6): print(getName(str(i))) # ------------------------------ except: print(traceback.format_exc()) input('**** Press to quit..') driver.quit()
Appium 作业 5
- 安装开发者头条应用
- 打开该应用,在阅读标签页中,点击 精选文章的第一篇,验证确实能打开同名文章
- 按返回键, 验证能够正确返回 阅读标签页
-
# coding=utf8 from appium import webdriver import time,traceback desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '5.1' desired_caps['deviceName'] = 'test' desired_caps['app'] = r'e:apk outiao.apk' desired_caps['appPackage'] = 'io.manong.developerdaily' desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' desired_caps['unicodeKeyboard'] = True desired_caps['noReset'] = True desired_caps['newCommandTimeout'] = 6000 #启动Remote RPC driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) print driver.session_id driver.implicitly_wait(10) try: # ----------------- # 用下面的表达式,也可以用xpath code = u'new UiSelector().resourceId("io.manong.developerdaily:id/btn_item").instance(0).childSelector(new UiSelector().className("android.widget.TextView"))' ele1 = driver.find_element_by_android_uiautomator(code) text1 = ele1.text print text1 ele1.click() time.sleep(2) ele2 = driver.find_element_by_id('io.manong.developerdaily:id/tv_title') text2 = ele2.text print text2 if text2 == text1: print 'pass' else: print 'fail' driver.press_keycode(4) # 检查是否回到刚才的页面 ele2 = driver.find_elements_by_id('io.manong.developerdaily:id/tab_bar_plus') if ele2: print 'we return back' # ----------------- except: print traceback.format_exc() driver.quit()
-