|
一、所需软件包一、node.js(v20.1.1)二、AndroidSDK(24.4.1版本)三、Python(3.10)四、PyCharm(2023.3.2)五、Appium(1.21.0)六、雷电模拟器(雷电9)若不想单独去下载,想直接获取所有安装包,请访问百度网盘链接提取:https://pan.baidu.com/s/1LSzazfQ2PbdiMLfZ4WiWAQ?pwd=n4vi二、环境配置2.1环境配置之Node.js 在官网选择对应版本下载:https://nodejs.org/en/download/,如图所示。.msi是一种Windows安装程序文件,而.zip是一个压缩包,解压即可,不需要安装。这里选择.msi格式(64位)。 完成下载后,双击.msi文件进行安装,安装成功后打开命令提示符窗口(win+R,再输入cmd回车)。输入node-v获得node.js的版本信息则是安装成功,如图所示。(注意是node(空格)-v)。 2.2环境配置之AndroidSDK①下载,解压AndroidSDK 进入Android中文网http://www.androiddevtools.cn/,点击SDKTools,点击android-sdk_r24.4.1-windows.zip下载压缩包并解压。如图所示。②下载必要包 解压SDK到本地后,进入SDK目录,如图所示。双击启动SDKManager.exe。点击DeselectAll,然后勾选如图所示的包选项,点击Install3packages...下载SDK必要的包。③配置SDK环境变量1)成功安装后AndroidSDK的根目录下应该同时具有了tools和platform-tools两个目录。2)设置ANDROID_HOME系统变量(没有请新建)为AndroidSDK根目录路径(类似JAVA_HOME)如图所示。④把AndroidSDK路径下的tools和platform-tools两个目录路径加入到系统环境变量Path。如图所示。 ⑤验证AndroidSDK环境 在终端(cmd)输入命令adb,回车,输出如下adb版本和帮助信息说明环境配置成功(只截取了一部分,后面还有很长),如图所示。2.3 环境配置之Python①下载安装文件:https://www.python.org/downloads/,这里选择Python3.10.0版本,点击Windowsinstaller(64-bit)下载Python安装程序。安装时选择AddPython3.10toPATH自动配置Python环境变量。然后点击InstallNow进行安装。 ②打开命令提示符窗口(win+R,再输入cmd回车),输入python并回车,出现以下类似信息即为安装成功。如图所示。③下载PyCharm: https://www.jetbrains.com/pycharm/download/other.html,这里选择2023.3.2版本(其他版本亦可)。如图所示。 2.4环境配置之Appium①下载安装文件https://github.com/appium/appium-desktop/releases/tag/v1.21.0(开启代理打开网址)MAC请下载dmg(这里下载1.21.0版本) ②直接双击appium-installer.exe文件安装就好,桌面会生成一个Appium的图标,此时已经可以通过Appium在桌面快捷方式启动Appium桌面应用程序。 ③配置Appium环境变量: 找到上一步安装Appium指定的安装路径(右击桌面的Appium图标,打开文件所在位置可找到安装路径),如图所示。 将该路径下的Appium加入环境变量Path,如图所示。 ④安装appium-python-client启动终端(cmd)输入pipinstallappium-python-client==2.11.0-ihttps://pypi.tuna.tsinghua.edu.cn/simple,出现提示Successfullyinstalled即成功。(终端输入piplist进行检查,如果出现下图中的WARNING提示,可按照要求更新或者不管),如图所示。 2.5 环境配置之模拟器官网安装雷电模拟器:安装网址:https://www.ldmnq.com/,选择雷电9(雷电5也可以)下载,如图所示。(安装过程中如果提示安装失败,请以管理员身份运行) 三、测试示例3.1启动雷电模拟器以学习通为测试对象,打开雷电模拟器,下载学习通。然后启动学习通,登录进入主页面。 3.2启动Appium双击打开Appium,点击StartServerv1.21.0,开启Appium。 点击右上角的搜索符号,开启AppiumServer。 这里需要编辑一个用于连接模拟器并打开学习通的参数配置(DesiredCapabilities),具体有四个核心的参数,分别为platformName,deviceName,appPackage,appActivity。 下面介绍如何获取到这些参数3.3配置Capability3.3.1platformName由于雷电模拟器是Android,所以platformName为Android3.3.2deviceName按住win+R键打开cmd窗口,输入adbdevices结果如图所示,所以deviceName即为emulator-5554,也就是雷电模拟器的设备名。 3.3.2appPackage和appActivity输入以下命令adbshelldumpsysactivity|findstr"mResume"(Android8.1之下版本使用adbshelldumpsysactivity|findstr"mFocus")查看学习通应用的appPackage和appActivity(必须保证雷电模拟器的学习通应用程序处于开启状态)如图所示。appPackage为com.chaoxing.mobile,appActivity为.main.ui.MainTabActivity所以最终配置如下: 这里多设置了一个noReset,这个参数表明不停止应用程序和清除应用程序数据。点击StartSession,等待一段时间(Appium会驱动雷电模拟器重启学习通,如果学习通处于黑屏状态导致连接失败,退出学习通,重新点击StartSession连接一次应该就可以了)如果出现以下界面,表示连接成功。 打开PyCharm,创建名为MobileAppTestProject的项目,新建一个名为XuexitongTest的python文件。如图所示。 输入以下测试脚本,点击PyCharm右上角的运行符号,执行测试脚本(确保Appium和雷电模拟器处于开启状态,脚本才能执行成功),脚本会驱动Appium自动打开学习通并依次点击“我”和“待办事项”,完成自动化测试。fromappiumimportwebdriverimporttimefromselenium.webdriver.common.byimportBy#AppiumDesiredCapabilitiescaps={"platformName":"Android","deviceName":"emulator-5554","appPackage":"com.chaoxing.mobile","appActivity":".main.ui.MainTabActivity","noReset":True}#与Appiumserver建立连接driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",caps)#等待页面加载,可以根据实际情况调整等待时间driver.implicitly_wait(10)#arrangeexpected="待办事项"#act#1.点击“我”driver.find_element(By.XPATH,"//*[@text='我']").click()time.sleep(2)#2.进入"待办事项"driver.find_element(By.ID,"com.chaoxing.mobile:id/tvTitle").click()time.sleep(2)#3.获取测试结果actual=driver.find_element(By.ID,"com.chaoxing.mobile:id/tvTitle").text#断言assertactual==expected,"实际值与期望值不相等"print("测试通过")#关闭应用程序和驱动driver.quit() 至此,移动应用测试环境配置成功。下面将介绍如何使用Appium。四、Appium使用4.1GUI说明 当Appium连接雷电模拟器成功后,应用程序的屏幕截图(快照视图)将出现在左边。如图所示。 可以在屏幕快照视图中使用鼠标来点击各种UI元素,将会看到它们突出显示。 窗口的中间是应用程序的层次结构,表示为XML。如图所示。可以通过单击它树节点,或者通过点击屏幕快照视图中的元素来导航这棵树然后它们在视图中会被强调显示。在应用层次结构中会直接将元素的id也就是resource-id值标记在树上,这对于Appium定位元素很方便,可以快速看到元素是否有id。 当一个元素被突出显示时,它的信息会出现右侧的元素信息视图中。如图所示。这个细节视图包括对元素的潜在操作,以及元素属性的表。这些属性将决定Appium定位元素的策略。 以下是对于Appium上面操作栏的初步说明。 4.2Appium+Python常用API 4.2.1、驱动初始化及基础操作webdriver.Remote(command_executor,desired_capabilities):初始化Appium驱动。driver.quit():关闭应用程序和驱动。4.2.2、元素定位及操作driver.find_element(by,value):根据指定的定位方式和值找到单个元素。driver.find_elements(by,value):根据指定的定位方式和值找到一组元素。element.click():点击元素。element.send_keys(text):向元素发送文本。4.2.3、元素等待time.sleep(seconds):强制等待,无论元素是否已准备好,都会等待指定的时间后执行后续操作。driver.implicitly_wait(seconds):隐式等待,设置全局等待时间。在查找元素时等待一定的时间,如果在规定时间内找到了元素,则立即执行后续操作,否则等待超时后抛出异常。WebDriverWait(driver,timeout).until(expected_conditions.condition):显示等待,在特定条件下等待一定时间,直到条件满足或等待超时。4.2.4、页面导航driver.get(url):打开指定的URL。 driver.back():返回上一页。 driver.forward():前进到下一页。4.2.5、屏幕滑动与滚动driver.swipe(start_x,start_y,end_x,end_y,duration):在屏幕上执行滑动操作。driver.scroll(origin_element,destination_element):在页面上执行滚动操作。对于滑动部分,若不理解,可以参考我找到的一篇博客(很详细)Appium+Python自动化测试学习之六:swipe滑屏操作实例-CSDN博客4.3测试的注意事项 结合我自己使用Python+Appium+雷电模拟器的一些经验,以下是我在进行测试的过程中的一些经验之谈(注意事项)4.3.1、对于元素定位 一般来说,我自己测试的过程中,大部分的点击代码都是使用页面上的Text文本(实在不行就使用绝对的xpath定位,前提是你能接受很长的一串xpath路径字符串)和少部分的ID进行定位。当然我很少选择xpath是迫不得已(一般来说文本定位都能够点得到)。对比如图所示。使用文本:4.3.2、对于Appium的使用 第一,对于本博客所使用的Appium有个不方便的点,就是雷电模拟器上的应用的页面切换不会在Appium中实现实时的同步更新,需要手动的去点击更新才能更新页面。 第二,就是每次执行Python脚本运行测试的时候,会自动断开Appium与雷电模拟器的连接(我每次执行完Python脚本,再次在Appium中点击刷新的按钮时,会提示连接错误,需要退出再次重连),所以建议元素定位时,一次性都写完脚本(千万别写一行语句,跑一次脚本,不然重连很费时间) 第三,当运行Python脚本进行测试的时候,建议先在雷电模拟器中退出当前的应用,否则可能测试时出现黑屏一直无法进入应用的情况(我觉得很可能是雷电模拟器的老毛病-->不稳定),感兴趣可以使用其他的模拟器(夜神模拟器)尝试。
|
|