Appium初体验

tech2023-11-05  97

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

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

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

1前置工作

1.1安装并配置Android sdk环境

1.2安装Pycharm

1.3安装配置JAVA JRE

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

JAVA_HOME

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

CLASSPATH

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

Path

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

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

1.4.安装Appium Desktop

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

1.5.安装夜神模拟器

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

则在path中加上

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

 

2执行顺序

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

然后打开Appium

 

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

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

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

执行完后,效果如下

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

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

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

得到最后的调试画面

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

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是夜深模拟器的默认端口,我们看看对不对

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

可以看到noxvmsvhandle对应的PID是10664

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

然后查找10664

夜神模拟器确实用了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

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

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

首先打开模拟器中的快手

然后在命令提示符中输入: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,如下

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

最后附完整代码

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()

 

最新回复(0)