从testerhome上看到很多测试同学分享了toast的获取方式,其中大部分是java版本的,但也有个python版本的:Appium1.7.2 android toast 消息测试

Appium获取toast实际使用了谷歌改造的Uiautomator2测试框架原理,具体改了哪些东西我还木有细看。

前言:

Appium1.5以后版本(server版本)才支持toast定位,并且’automationName’必须设置为’Uiautomator2’。

因为appium底层使用的uiautomator去执行脚本命令,所以在appium1.5版本后其实在它内部加了uiautomator2进行执行脚本,它内部就实现了获取toast的方式。

目前appium1.7的Android版本支持:Espresso、Uiautomator2、Uiautomator、Selendroid四种驱动模式,后边两个不推荐用了,Espresso这个是最新支持的beta阶段,Uiautomator2是最稳定的,这对搞Espresso的人来说可是好消息。

iOS我还木有调通,这里我讲下Android。

环境准备:

1. appium server 1.7版本 下载地址:appium/appium-desktop

下载appium-desktop-Setup-1.5.0-ia32.exe 并启动服务

2. 安装appium-uiautomator2-driver

使用npm命令安装,npm如何安装自己百度。

npm install appium-uiautomator2-driver

mac本需要自主下载两个apk,(appium-uiautomator2-server-v0.1.8.apk、appium-uiautomator2-server-debug-androidTest.apk)

需要放在本机 path usr/local/lib/node_modules/appium/node_modules/appium-uiautomator2-driver/uiautomator/目录下

下载地址:appium/appium-uiautomator2-server

3. appium-python-client 只要大于1.0版本以上就行

代码示例:

需要自己有一个可以测试toast的包,这里有一个例子https://github.com/Ericsongyl/AndroidToastUtil

或者直接apk:出错了 - 城通网盘-50TB超大网盘

# coding=utf-8

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from appium import webdriver

import unittest

import time

class ToastDemo(unittest.TestCase):

def setUp(self):

desired_caps={}

desired_caps['platformName'] = 'Android'

desired_caps['platformVersion'] = '4.2'

#desired_caps['unicodeKeyboard'] = 'true'

desired_caps['deviceName'] = 'Android Emulator'

desired_caps['automationName']='Uiautomator2' #这里要声明uiautomator2

desired_caps['udid'] = '98LFBNP22EYL'

desired_caps['appPackage'] = 'com.nicksong.toastutil'

desired_caps['appActivity'] = '.MainActivity'

self.driver=webdriver.Remote("http://localhost:4723/wd/hub",desired_caps)

def tearDown(self):

self.driver.quit()

def test1(self):

time.sleep(5)

self.driver.find_element_by_id("com.nicksong.toastutil:id/bt_default_toast").click()

toast_loc=("xpath",".//*[contains(@text,'默认')]")

e1=WebDriverWait(self.driver,20,0.1).until(EC.presence_of_element_located(toast_loc)) #获取toast位置

print e1.text

二、Appium webview操作示例

前言:

很早之前有写过通过chromedriver驱动webview的文章:https://blog.csdn.net/jack_chen3/article/details/50281581

Webview测试包:出错了 - 城通网盘-50TB超大网盘

这里记录一下实例:

class MyTestCase(unittest.TestCase):

def setUp(self):

desired_caps = {}

desired_caps['platformName'] = 'Android'

desired_caps['platformVersion'] = '4.2'

#desired_caps['unicodeKeyboard'] = 'true'

desired_caps['deviceName'] = 'Android Emulator'

desired_caps['chromeOptions']={'androidProcess': 'com.example.jack.webviewtest'} #需要添加该配置选项

desired_caps['appPackage'] = 'com.example.jack.webviewtest'

desired_caps['appActivity'] = '.MainActivity'

self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

time.sleep(5)

def tearDown(self):

self.driver.quit()

def Demo01(self):

time.sleep(2)

s=self.driver.contexts #获取当前存在的上下文对象,可用于切换

for i in s:

print i

print self.driver.current_context

time.sleep(4)

self.driver.switch_to.context("WEBVIEW_com.example.jack.webviewtest") #切换为webview上下文

time.sleep(5)

print self.driver.page_source #打印当前webview的界面

bb=self.driver.find_element_by_xpath("//*[@id='word']")

bb.click()

bb.send_keys("test")

time.sleep(3)

查看webview界面元素:

打开电脑上的chrome浏览器,输入地址chrome://inspect/,操作手机进入到webview页,电脑可以看到这个页面,然后点击inspect,就可以看到类似手机的界面,当操作电脑网页,手机网页会有相应反应。

找到xpath定位后,直接copy xpath就可以定位到该控件。

PS:需要注意的是电脑网络需要翻墙,因为没有翻墙情况时,打开inspect时会显示为空白情况。

appium获取toast和操作webview实例的更多相关文章

  1. Appium获取toast消息

    Android获取toast,需要在参数里设置automationName:Uiautomator2 设置设备的信息 desired_caps = { 'platformName': 'Android ...

  2. Appium获取toast消息遇到的问题(一)

    一.运行错误 Android获取toast,需要在参数里设置automationName:Uiautomator2 1 # 设置设备的信息 2 desired_caps = { 3 'platform ...

  3. Python+Appium 获取 toast 文本值方法的封装

    获取toast内容方法封装如下: def get_Toast(self,message): #查找toast值 ''' method explain:查找toast的值,与find_Toast实现方法 ...

  4. appium获取Toast内容的方法

    做自动化测试的时候,可能需要根据弹出的Toast提示来做下一步判断.这里记录一下获取Toast内容的方法,同时巩固一下显示等待的方法之一WebDriverWait. from selenium.web ...

  5. appium获取toast方法

    配置toast请注意: 1.指定desired_caps["automationName"] = "UiAutomator2" 2.要求安装jdk1.8 64位 ...

  6. Appium获取toast消息(二)

    刚接触appium进行移动端设备的UI自动化,在遇到toast消息的时候很是苦恼了一阵,最后通过强大的搜索引擎找到了个相对解决方法,废话不多说,直接贴代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ...

  7. appium+java(八)获取Toast内容信息

    前言 Appium中很经典的问题了,在两年前也就是2017年3月6号07:22分,我才看到appium1.6.3版本的发布,更新内容为Ios上可以实现Toast的获取,而Windows也就是安卓端,还 ...

  8. Appium+Python之获取toast

    思考:手机APP上的必填或错误文本提示一般1-2s就会消失,比较难定位,所以一般的固定元素定位方式是不可用的,那我们如何定位toast呢? 前提:1.Appium1.6.3以上(包括1.6.3) 2. ...

  9. 『与善仁』Appium基础 — 29、获取toast信息

    目录 1.toast介绍 2.toast定位 3.示例 4.封装toast判断 1.toast介绍 Android中的toast是一种简易的消息提示框,toast提示框不能被用户点击,会根据所设置的显 ...

随机推荐

  1. mysql数据库之linux版本

    http://repo.mysql.com/yum/mysql-5.6-community/ 安装                                                    ...

  2. 割点(tarjan)

    对于根来说,如果它有超过1棵子树,那么它是一个割点 对于非叶结点来说,如果它的某一个儿子没有回边能到达高于它的点,那么它是一个割点 叶节点不是割点 //洛谷3388 #include<algor ...

  3. torch.nn.LSTM()函数维度详解

    123456789101112lstm=nn.LSTM(input_size,                     hidden_size,                      num_la ...

  4. Python--day47--mysql索引类型介绍

    组合索引(联合索引)详讲:组合索引相对索引合并的缺点是 覆盖索引和索引合并不是真实的索引,只是名词: 命中索引,要避免使用哪些:id.nid是主键 email,num()是索引 1,避免使用like ...

  5. axis2 wsdl2java工具

    wsdl2java工具使用方法描述: C:\Users\Administrator>wsdl2java -h Using AXIS2_HOME: E:\Apache_Projects\axis2 ...

  6. java UDP传输

    ①:只要是网络传输,必须有socket . ②:数据一定要封装到数据包中,数据包中包括目的地址.端口.数据等信息. 直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对 ...

  7. 【u236】火炬

    Time Limit: 1 second Memory Limit: 128 MB 2008北京奥运会,你想成为四川汶川的一名火炬手,结果层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个 ...

  8. java 静态导入(1.5特性,好处是不用写类名)

    import语句可以导入一个类或某个包中的所有类 import static语句导入一个类中的某个静态方法或所有静态方法 语法举例: import static java.lang.Math.sin; ...

  9. multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded

    情景再现: 上传文件到.net(wcf)后台时,总是上传不成功,后台要求Content-Type是application/octet-stream,我使用multipart/form-data方式,c ...

  10. linux进程互斥等待

    我们已经见到当一个进程调用 wake_up 在等待队列上, 所有的在这个队列上等待的进程 被置为可运行的. 在许多情况下, 这是正确的做法. 但是, 在别的情况下, 可能提前知道 只有一个被唤醒的进程 ...