一、环境搭建

1 java sdk的安装以及环境变量的配置 官方网站 https://www.oracle.com/index.html下载java jdk1.8 ,下载完成后安装到本地。 bin目录下存放JDK用于开发的一些终端命令工具。常见的工具如:

“javac”的作用是将java源文件编译为class文件(即自解码文件);
“java”命令的作用是运行class文件。

db目录下是java开发的一个开源的关系型数据库;

include目录下是一些C语言的头文件;

jre目录下JDK所依赖的java运行时;

lib目录下存放JDK开发工具所依赖的一些库文件;

man目录下存放JDK开发工具的说明文档。

terminal中输入.bash_profile,如果你是第一次配置环境变量,可以使用“touch .bash_profile” 创建一个.bash_profile的隐藏配置文件.如果你是为编辑已存在的配置文件,则使用"open -e .bash_profile”命令;打开文件后输入

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH

完成java home环境变量的配置,在终端输入java -version,看见下图则证明配置成功。

2 Android sdk的安装以及环境变量的设置

在MAC上安装android-sdk,标准的安装方法是使用homebrew,运行如下命令:
brew update
brew install android-sdk
安装完成后配置.bash_profile,如果是zsh则配置.zshrc,在文件结尾加上export ANDROID_HOME="/usr/local/opt/android-sdk”
退出后执行
source~/.zshrc
使文件生效。

3 appium desktop的安装 在GitHub的相关网站执行https://github.com/appium/appium-desktop/releases/tag/v1.21.0,选择相应的版本进行下载。

4 adb命令的使用及连接手机的设备管理 终端输入adb,看到下图的输出则安装完成,配置环境变量。

adb -devices查看连接的设备

,没连接到可以在手机端端wlan中找到端口号, ping一下相应的端口 ;通了就可以使用topic 端口号连接 然后执行,重启服务,

adb kill-server ,adb start-server

安装应用使用apk的路径

adb install apk路径

获取手机日志

adb logcat

获取app启动时间

adb shell am start -w 包名/启动名

获取包名和activity名称

adb shell dumpsys window windows |grep mfousedApp

二、元素定位方法

1.正则表达式 练习网址 https://regex101.com/

. 含义是匹配所有的字符
* 含义是重复匹配任意次数,包括0次
+含义是重复匹配 多次,至少匹配一次,所以不包含0次
 ?含义是匹配前面子表达式1次或者0次
{ }含义是子表达式中的字符匹配指定的次数
\含义可以表示转义,也可以表示匹配某种字符。
[]代表匹配 指定的几个字符之一
^代表从文本开头开始匹配,如果是单行模式则是全文的开头,多行模式则是每一句的开头。$相反的,结尾查找
\d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9]
\D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9]
\s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v]
\S 匹配任意一个非空白字符,等价于表达式 [^ \t\n\r\f\v]
\w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_]
缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母
\W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_]
反斜杠也可以用在方括号里面,比如 [\s,.] 表示匹配 : 任何空白字符, 或者逗号,或者点

2.元素定位的方法 使用sdk tools工具中的automateveiwer或者appium自带的元素定位,使用appium desk 使用/Users/zexin.zhao/Library/Android/sdk中的tools中的UIautomatorViewer

一个元素的定位

  • find_element_by_id
driver.fand_element_by_id = (id_value) //resource_id
  • find_element_by_classname
driver.fand_element_by_classname = (class)
  • find_element_by_xpath
driver.fand_element_by_xpath = (xpath_value) 格式是driver.fand_element_by_xpath(//*[@])

一组元素的定位

  • find_elements_by_id
titles = driver.fand_elements_by_id = (id_value) //resource_id 返回值是一个列表
 for title in titles:
    print(title.text)
Titles[1].click()
  • find_elements_by_classname
driver.fand_elements_by_classname = (class)返回值是一个列表
  • fidfind_elements_by_xpath
driver.fand_elements_by_xpath = (xpath_value) 格式是driver.fand_element_by_xpath(//*[@])返回值是一个列表

程序退出的指令

driver.quit() driver对象直接退出
driver.close_app()关闭应用程序,driver对象还在

安装、卸载和判断是否安装app //安装

driver.insatll_app (“路径")

//卸载

driver.remove_app (“包名")

//是否安装

driver.is_app_installed (“包名")

将应用置于后台(for example银行软件,当应用置于后台时一定时间回到前台,重新登陆)热启动(不关机)冷启动(关机)

driver.background_app(5)

元素等待 隐式等待:driver.implicitlywait(10) 等待过程中出现了等待的元素就会执行操作。sleep方法时强制等待 所有方法都会有等待 显示等待:

创建webdriverWait的对象,wait = webdriverWait(driver,timeout,间隔时间) 每隔多少秒掉用一次方法,直到timeout 只有该方法有效

使用该对象调用until方法。

wait.until(self,method) example:wait.until(lambda x,x.find_element_by_id())

元素输入和清空

element= driver.find_element_by_id() 
Element.send_keys(‘文本’)
Element.clear()

元素的文本内容

element= driver.find_element_by_id() 
elment.text()

元素的位置和大小

element= driver.find_element_by_id()
Element.location()
Element.size()

根据属性名拿到属性值

element= driver.find_element_by_id()
element.get_attribute(value)

Swipe滑动事件

driver.swipe(start_x, start_y, end_x, end_y, duration:滑动操作持续的时间长度) 距离相同,滑动时间越长距离越小

scroll滑动屏幕

driver.scroll(origin_e1 , destination_e1) 从元素滑动到元素(有惯性)

drag_and_drop滑动屏幕

driver.drag_and_drop(origin_e1 , destination_e1)从元素滑动到元素,开始元素在结束元素的位置(没有惯性)

touchAction使用 创建touchaction对象 通过对象调用手势 通过perform()执行 高级手势touchaction----轻敲

touchAction(driver).tap(element = none, x= 坐标,y = 坐标).perform()

高级手势touchaction----按下

touchAction(driver).press(element = none, x= 坐标,y = 坐标).perform()

高级手势touchaction----抬起

touchAction(driver).release().perform()

高级手势touchaction----等待

touchAction(driver).wait(ms= 100).perform()

高级手势touchaction----长按

touchAction(driver).long_press(element = none, x= 坐标,y = 坐标, duration = 10).perform()

高级手势touchaction----手指移动

touchAction(driver).move_to(element = none, x= 坐标,y = 坐标).perform()

获取和设置手机网络 获取手机网络指令

driver.network_connection() connectionType

设置当前网络

driver.set_network_connection(0/1/2/4/6)

发送键到设备

Driver.press_keycode(keycode关键代码 ,metatate = none) 
Android keycode列表:https://blog.csdn.net/midux/article/details/80064054

操作通知栏

Driver.open_notifications()

三、断言编写 1 测试框架的使用

四、异常处理 1.异常处理机制