Appium初体验

偶然接触到这个自动化测试工具,现记录一下使用过程,另外我没有安卓真机,先用的genymotion模拟器,觉得夜神模拟器更加方便一点

提供一部分安装包给大家,方便大家下载

链接:https://pan.baidu.com/s/1MdSD14KGH_NU8n3cRrzknw
提取码:cu5y

Appium初体验_第1张图片

1前置工作

1.1安装并配置Android sdk环境

1.2安装Pycharm

1.3安装配置JAVA JRE

使用的过程中一直报错:找不到JAVA_HOME,所以也就索性重装一了一遍,安装包见前面百度云链接

Appium初体验_第2张图片

JAVA_HOME

C:\Program Files\Java\jre1.8.0_261

Appium初体验_第3张图片

CLASSPATH

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

Appium初体验_第4张图片

Path

%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;

另外记住把java bin的变量值放在path前面一点

1.4.安装Appium Desktop

记得一定要点第一个,我第一次点的第二个,各种错误,重装后选第一个才能正常使用

Appium初体验_第5张图片

1.5.安装夜神模拟器

注意将安装路径加入到Path变量中,比如我的安装目录是E:\learn\Nox\bin

Appium初体验_第6张图片

则在path中加上

Appium初体验_第7张图片

然后将;%ANDROID_HOME%\platform-tools文件夹下的里面的adb.exe重命名为nox_adb.exe,复制到上面对应的目录E:\learn\Nox\bin,如果找不到可以试试我百度云链接里面的nox_adb.exe。

 

2执行顺序

打开夜神模拟器,我们先安装BILIBILI软件

Appium初体验_第8张图片

然后打开Appium

Appium初体验_第9张图片

 

直接点击“启动服务器v1.15.1”,弹出如下界面

Appium初体验_第10张图片

然后打开命令提示符,输入nox_adb connect 127.0.0.1:62001

接着在pycharm中执行代码,源代码参见Appium 自动化的打开 B站 应用

执行完后,效果如下

Appium初体验_第11张图片

这时你可以点开Appium界面的放大镜

Appium初体验_第12张图片

添加名称,也就是desired_caps对应的内容

{
  'platformName': 'Android',
  'deviceName': '127.0.0.1:62001',
  'appPackage': 'tv.danmaku.bili', 
  'appActivity': '.ui.splash.SplashActivity', 
}

Appium初体验_第13张图片

得到最后的调试画面

Appium初体验_第14张图片

放大镜可以录制动作并转化成代码

2测试快手APP

2.1启动快手

回顾一下我们如何使用appium-client启动夜神模拟器中的应用

1我们需要开启Appium服务,端口号设置为4723

2开启夜神模拟器,

3使用nox_adb命令,连接模拟器的ip+端口

4在pycharm连接Appium服务器,发送指令给Appium,Appium再控制手机

第三步的nox_adb,我们的命令是nox_adb connect 127.0.0.1:62001,为什么夜神模拟器的ip是127.0.0.1,端口号62001又是怎么来的呢。62001是夜深模拟器的默认端口,我们看看对不对

先在任务管理器找到夜神模拟器的

Appium初体验_第15张图片

Appium初体验_第16张图片

可以看到noxvmsvhandle对应的PID是10664

打开命令提示符,输入netstat -aon

然后查找10664

Appium初体验_第17张图片

夜神模拟器确实用了62001这个端口

第四步中,我们的代码出现了

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

因为pycharm利用appium-client连接了4723端口对应的appium服务器。

最后回到我们的代码中来

启动快手APP,只用了下面9行代码(前提是在模拟器中首先安装了快手)

from appium import webdriver
desired_caps = {
  'platformName': 'Android', # 被测手机是安卓
  'platformVersion': '5.1.1', # 手机安卓版本
  'deviceName': '0.0.0.0:62001', # 设备名,安卓手机可以随意填写
  'appPackage': 'com.smile.gifmaker', # 启动APP Package名称
  'appActivity': 'com.yxcorp.gifshow.HomeActivity', # 启动Activity名称
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

platformName就是测试平台

platformVersion是安卓版本,可以看到我的模拟器版本确实是5.1.1

Appium初体验_第18张图片

deviceName是设备名称,安卓可以随便写

重点是appPackage和appActivity,前者是包名,区别不同的应用,后者对应的是哪个界面,那么这两个值是怎么来的呢,这里我给出一个方法

首先打开模拟器中的快手

Appium初体验_第19张图片

然后在命令提示符中输入:adb shell dumpsys window windows | findstr mFocusedApp

得出包名和界面名

2.2在应用中启动别的应用

先启动快手,再启动哔哩哔哩,可以使用start_activity方法

from appium import webdriver
import time
desired_caps = {
  'platformName': 'Android', # 被测手机是安卓
  'platformVersion': '5.1.1', # 手机安卓版本
  'deviceName': '0.0.0.0:62001', # 设备名,安卓手机可以随意填写
  'appPackage': 'com.smile.gifmaker', # 启动APP Package名称
  'appActivity': 'com.yxcorp.gifshow.HomeActivity', # 启动Activity名称
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(3)
driver.start_activity("tv.danmaku.bili",".ui.splash.SplashActivity")
time.sleep(3)
driver.quit()

可以打印正在运行的包名和页面名称

print(driver.current_package,driver.current_activity)

2.3关闭应用

driver.close_app()

2.4切合后台

driver.background_app(s)

2.5找到元素

home_button = driver.find_element_by_id("com.smile.gifmaker:id/left_btn")

2.6事件

点击:home_button.click()

输入:home_button.send_keys('123456')

清除:home_button.clear()

滑动:swipe/scroll/drag_and_drop

2.7等待

user= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/name"))
user.click()

3实战

我们在快手拉黑一个人,是不是先打开APP,然后搜素该用户,最后拉黑。前面的找到元素

home_button = driver.find_element_by_id("com.smile.gifmaker:id/left_btn") ,这个括号里的参数是怎么获取的呢

如果你能成功的运行“启动快手APP”这一步,则你需要的只是一个uiautomatorviewer

该文件在AndroidStudioSdk\tools\bin下。点击uiautomatorviewer.bat,如下

Appium初体验_第20张图片

然后在我们的夜神模拟器中打开快手,停在搜索页面,点击工具栏第二个图标,然后鼠标点击到这个搜索框,下面的resource-id的值就是我们需要找的内容

Appium初体验_第21张图片

最后附完整代码

from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
desired_caps = {
    'platformName': 'Android',  # 被测手机是安卓
    'platformVersion': '5.1.1',  # 手机安卓版本
    'deviceName': '0.0.0.0:62001',  # 设备名,安卓手机可以随意填写
    'appPackage': 'com.smile.gifmaker',  # 启动APP Package名称
    'appActivity': 'com.yxcorp.gifshow.HomeActivity',  # 启动Activity名称
    'noReset': True,  # 不要重置App
    'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
    'resetKeyboard': True,  # 执行完程序恢复原来输入法
    'automationName': 'UiAutomator1'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
home_button = driver.find_element_by_id("com.smile.gifmaker:id/left_btn")  # 进入home
home_button.click()
tab_search = driver.find_element_by_id("com.smile.gifmaker:id/tab_search")  # 点击查找
tab_search.click()
wait = WebDriverWait(driver, 5, poll_frequency=1)
hint = wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/inside_editor_hint"))
hint.click()
search_box = driver.find_element_by_id("com.smile.gifmaker:id/editor")
search_box.send_keys("572198786")  # 设置查询内容
driver.find_element_by_id("com.smile.gifmaker:id/right_tv").click();  # 点击搜素
#出现滑块,等后退
driver.find_element_by_id("com.smile.gifmaker:id/left_btn").click();  # 后退
driver.find_element_by_xpath("//*[@text='用户']").click()
user= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/name"))
user.click()
send_message= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/send_message"))
send_message.click()
user_info= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/right_btn"))
user_info.click()
add_black_btn= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/add_black_btn"))
add_black_btn.click()
confirm= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/qlist_alert_dialog_item_text"))
confirm.click()
driver.close_app()
driver.quit()

 

你可能感兴趣的:(爬虫,appium)