APP自动化--appuim学习笔记__转载自http://www.testclass.net/appium/appium-base-dc/

目录

1.Desired Capabilities

2.控件元素定位

ruby篇

python篇

java篇

3. ADB常用的几个命令

4.环境配置-Android SDK+JDK+eclipse+ant+adt

第一步、安装JDK;

第二步、安装Eclipse;

第三步、下载并安装AndroidSDK;

第四步、为Eclipse安装ADT插件

5.appium自动化测试搭建流程

。1连接设备名称(真机/模拟机):adb devices 

。2明确测试包名和activity(当前打开界面的APP):adb shell dumpsys window | findstr mCurrentFocus

。3定位控件元素:D:\android-sdk_r16-windows\android-sdk-windows\tools下工具uiautomatorviewer.bat实现

。4搭建Java project

 


 


1.Desired Capabilities


Desired Capabilities 在启动 session 的时候是必须提供的。

Desired Capabilities 本质上是以 key value 字典的方式存放,客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。它告诉 appium Server这样一些事情:

Appium 的 Desired Capabilities 基本配置如下:


DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "5.1");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");

WebDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

  • deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4...

  • automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。

  • platformName:使用哪种移动平台。iOS, Android, orFirefoxOS。

  • platformVersion:指定平台的系统版本。例如指的Android平台,版本为5.1。

  • appActivity:待测试的app的Activity名字。比如MainActivity、.Settings。注意,原生app的话要在activity前加个"."。获取方式:使用adb shell,进入后执行

    adb dumpsys  activity activities | grep mFocusedActivity # 8.0以下
    
    adb shell dumpsys activity activities | grep mResumedActivity # 8.0
  • appPackage:待测试的app的Java package。比如com.example.android.myApp, com.android.settings。

 

2.控件元素定位

继承自webdriver的方法,也就是通过这3个特征可以定位控件

  • find by "class" (i.e., ui component type,andorid上可以是android.widget.TextView)
  • find by "xpath" (i.e., an abstract representation of a path to an element, with certain constraints,由于appium的xpath库不完备的原因,这个不太推荐)
  • find by "id"(android上是控件的resource id)

Mobile JSON Wire Protocol 协议中定义的方法,更适合移动设备上的控件定位

  • -ios uiautomation: a string corresponding to a recursive element search using the UIAutomation library (iOS-only)
  • -android uiautomator: a string corresponding to a recursive element search using the UiAutomator Api (Android-only)
  • accessibility id: a string corresponding to a recursive element search using the Id/Name that the native Accessibility options utilize.

在appium 的client对Mobile JSON Wire Protocol中定义的方法进行了封装,使其调用起来更加方便

ruby篇

find_element :accessibility_id, 'Animation'
find_elements :accessibility_id, 'Animation'
find_element :uiautomator, 'new UiSelector().clickable(true)'
find_elements :uiautomator, 'new UiSelector().clickable(true)'

当然了,你也可以使用原生的webdriver方法

find_element id: 'resource_id'

另外,ruby lib里提供了一些非常好用的简便方法来进行控件的定位,好写,好读。

  • text(value_or_index) :Find the first TextView that contains value or by index. If int then the TextView at that index is returned.
  • button(value_or_index):Find the first button that contains value or by index. If int then the button at that index is returned

更多请看这里

python篇

el = self.driver.find_element_by_android_uiautomator('new UiSelector().description("Animation")')
self.assertIsNotNone(el)
els = self.driver.find_elements_by_android_uiautomator('new UiSelector().clickable(true)')
self.assertIsInstance(els, list)

el = self.driver.find_element_by_accessibility_id('Animation')
self.assertIsNotNone(el)
els = self.driver.find_elements_by_accessibility_id('Animation')
self.assertIsInstance(els, list)

总的来说就是在driver里增加了

  • find_element_by_accessibility_id
  • find_elements_by_accessibility_id
  • find_element_by_android_uiautomator
  • find_elements_by_android_uiautomator

等方法

java篇

前面也讲过了,新增了这些方法

findElementByAccessibilityId()
findElementsByAccessibilityId()
findElementByIosUIAutomation()
findElementsByIosUIAutomation()
findElementByAndroidUIAutomator()
findElementsByAndroidUIAutomator()

3. ADB常用的几个命令

1. 查看设备
adb devices
2.安装软件
adb install 文件名
adb install NiChuWoCai.apk
3.卸载软件
adb install 包名
com.smarthand.nichuwocai
4.进入设备或者模拟器的shell
adb shell
进入之后就可以执行shell命令了,比如cd ,pwd,ls等
5.从电脑上发送文件到设备(手机)
adb push <本地路径> <远程路径>
adb push R.txt /sdcard/R.txt
把当前文件夹下面的文件R.txt文件发送到手机的/sdcard/下面
6. 从设备(手机)上下载文件到电脑
adb pull <远程路径> <本地路径>
adb pull /sdcard/DCIM/IMG_20150207_105815.jpg ./IMG_20150207_105815.jpg
如下图所示
7.查看bug报告
adb bugreport
8.获取设备的ID和序列号
adb get-serialno

 

* adb push <本地路径> <远程路径>

用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)从设备上下载文件到电脑

* adb pull <远程路径> <本地路径>

用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑显示帮助信息

* adb help

这个命令将显示帮助信息

这里还有一个英文版的:

在DOS下输入以下命令基本可以完成刷机任务,一些常用命令解释如下:

adb devices - 列出连接到电脑的ADB设备(也就是手机),一般显示出手机P/N码.如果没有显示出来则手机与电脑没有连接上.adb install <packagename.apk> – 安装手机软件到手机中,如:adb install qq2009.apk.adb remount – 重新打开手机写模式(刷机模式).adb push <localfile> <location on your phone> - 传送文件到手机中,如:adb push recovery.img /sdcard/recovery.img,将本地目录中的recovery.img文件传送手机的SD卡中并取同样的文件名.adb pull <location on your phone> <localfile> - 传送手机的文件到本地目录(和上命令相反).

adb shell <command> - 让手机执行命令,<command>就是手机执行的命令.如: adb shell flash_image recovery /sd-card/recovery-RAv1.0G.img,执行将recovery-RAv1.0G.img写入到recovery 区中.

我们刷recovery时一般按下顺序执行:

adb shell mount -a

adb push recovery-RAv1.0G.img /system/recovery.img

adb push recovery-RAv1.0G.img /sdcard/recovery-RAv1.0G.img

adb shell flash_image recovery /sdcard/recovery-RAv1.0G.img reboot

其它的自己灵活运用了.

ADB命令详解:Android Debug Bridge version 1.0.20 -d  - directs command to the only connected USB device returns an error if more than one USB device is present.-e   - directs command to the only running emulator.returns an error if more than one emulator is running.-s <serial number>            – directs command to the USB device or emulator withthe given serial number-p <product name or path>     – simple product name like ’sooner’, or a relative/absolute path to a product out directory like ‘out/target/product/sooner’.If -p is not specified, the ANDROID_PRODUCT_OUT environment variable is used, which must be an absolute path.devices   – list all connected devicesdevice commands: adb push <local> <remote>    – copy file/dir to deviceadb pull <remote> <local>    – copy file/dir from deviceadb sync [ <directory> ]     – copy host->device only if changed (see ‘adb help all’)adb shell                    – run remote shell interactivelyadb shell <command>          – run remote shell commandadb emu <command>            – run emulator console commandadb logcat [ <filter-spec> ] – View device logadb forward <local> <remote> – forward socket connectionsforward specs are one of:

tcp:<port>localabstract:<unix domain socket name>localreserved:<unix domain socket name>localfilesystem:<unix domain socket name>dev:<character device name>jdwp:<process pid> (remote only)

adb jdwp  – list PIDs of processes hosting a JDWP transportadb install [-l] [-r] <file> – push this package file to the device and install it(‘-l’ means forward-lock the app)(‘-r’ means reinstall the app, keeping its data)adb uninstall [-k] <package> – remove this app package from the device(‘-k’ means keep the data and cache directories)adb bugreport                – return all information from the device that should be included in a bug report.adb help                     – show this help messageadb version                  – show version num

DATAOPTS: (no option)                   – don’t touch the data partition-w                           – wipe the data partition-d                           – flash the data partitionscripting: adb wait-for-device          – block until device is onlineadb start-server             – ensure that there is a server runningadb kill-server              – kill the server if it is runningadb get-state                – prints: offline | bootloader | deviceadb get-serialno             – prints: <serial-number>adb status-window            – continuously print device status for a specified deviceadb remount                  – remounts the /system partition on the device read-writeadb root                     – restarts adb with root permissionsnetworking: adb ppp <tty> [parameters]   – Run PPP over USB.Note: you should not automatically start a PDP connection.<tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1[parameters] – Eg. defaultroute debug dump local notty usepeerdnsadb sync notes: adb sync [ <directory> ]<localdir> can be interpreted in several ways:- If <directory> is not specified, both /system and /data partitions will be updated.- If it is “system” or “data”, only the corresponding partition is updated

 

4.环境配置-Android SDK+JDK+eclipse+ant+adt

第一步、安装JDK;

第二步、安装Eclipse;

第三步、下载并安装AndroidSDK;

第四步、为Eclipse安装ADT插件

 

下面详细介绍。

第一步、安装JDK

Android开发工具要求必须安装JDK(JavaDevelopment Kit),不能只安装JRE(Java Runtime Edition),在安装Android开发工具之前需要先安装JavaJDK。尤其是Eclipse的开发过程必须要JDK或者JRE的支持,否则在启动Eclipse的时候就会报错:

 

首先,去JAVA官网上(http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载JDK(注意是下载JDK,不是JRE),

 

点击JDK下载按钮后,进入JDK版本选择界面,找到适合自己电脑系统的JDK版本,并下载,如下图所示,win32位的系统选择Windows x86,64位的系统则选择Windows x64安装:

 

下载好后,双击安装:

 

然后选择好自己要安装的路径:

 

安装JDK的时候,会自动给你安装JRE,选择好自己要安装的路径就行了:

 

然后就不断下一步,到最后安装完成:

 

安装好后,要配置环境变量。新建一个系统环境变量,变量名为JAVA_HOME,变量值为JDK的安装路径,如下图所示:

 

然后在系统变量列表中,双击Path变量,并将;%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin追加到变量值后面(注意,在变量的最末尾添加时,要记得加上分号):

 

现在Oracle JDK成为系统可执行文件搜索路径的一部分了,且该地址很容易找到。为了验证安装是否成功,打开命令行窗口,在命令提示符下执行javac -version。如果安装成功,就会看到Oracle JDK版本号,如下图所示:

 

 

第二步、安装Eclipse

 

去Eclipse官网(http://www.eclipse.org/downloads/)上下载Eclipse,选择EclipseIDE for JAVA EE Developers,根据自己的系统选择32位或者64位的安装包,

 

Eclipse下载好后是一个zip压缩包,直接解压到你想要放置的文件夹中即可使用,无需自己安装,其文件目录如下:

 

Eclipse安装好后,双击“eclipse.exe”打开,如下图所示:

 

 

要注意,此时打开Eclipse。有可能会报如下的错误:

 

出现这种问题,可能的原因是JDK的环境变量没有配置好,请按照第一步中讲到的JDK环境变量设置方式进行配置。如果还是报错的话,那么可能是环境变量还是没有设置好,出现这种情况我们只需要重启一下电脑就行了。如果还是不行,那么可以通过修改Eclipse.ini文件,在最前面加上两行内容:

-vm

D:\android\Java\jdk1.8.0_51\bin\javaw.exe   (注意,要把D:\android\Java\jdk1.8.0_51\换成你自己的jdk安装目录)

通过上面一番折腾之后,那么现在Eclipse就可以顺利启动啦!

启动Eclipse后,首先会让你选择一个工作空间,自己指定一个就是了(默认的是C盘的workspace文件夹):

 

然后进入Eclipse欢迎界面,如下图所示:

 

到这里,Eclipse安装就完毕了。

 

第三步、下载并安装AndroidSDK

前面两步,我们已经配置了JDK变量环境,并安装好了Eclipse,通过这两步之后Java的开发环境就准备好了,如果我们只是开发普通的JAVA应用程序的话,那么到这里就可以了。但如果我们要通过Eclipse来开发Android应用程序的话,那么我们还需要下载Android SDK(Software Development Kit)和在Eclipse上安装ADT插件。

首先,下载Android SDK Tools,翻过墙的朋友可以去Google Android的官网上下载(http://developer.android.com/sdk/index.html)。不愿意FQ的朋友,可以去我的bd网盘上下载(http://pan.baidu.com/s/1nt8BcBB),或者去这个网站下载(http://www.androiddevtools.cn/)。下面介绍一下在这个网站上下载的情况,首先打开http://www.androiddevtools.cn/,我们可以看到这里面有Android开发所需的各种工具,首先找到SDK Tools:

 

选择一个最新的版本就行了。注意,这里有exe和zip两种文件可供下载,exe的就是个安装程序,下载下来需要自己双击安装。这里建议下载zip压缩包,下载后,直接解压缩到你想要安装Android的路径就行了。解压后的文件目录如下:

 

然后就双击“SDK Manager.exe”,启动SDK Manager,如图所示:

 

看到有这么多需要选择安装的时候,是不是一时有点头脑发昏眼冒金星不知道咋办了啊。。。尤其是对于像Neo这种重度选择恐惧症患者来说,真是感觉脑袋都要爆浆了。。。这个时候啦,一定要keep calm。

在这里我只说几个必须要安装的,如上图所示的,Tools文件夹里面的Android SDK Tools(这个我们在之前的一步已经下载好了的,一般不会让你再安装了,不过有可能会让你更新),然后就是Android SDK Platform-tools和Android SDKBuild-tools,注意只需要下载最新的版本就行了。

然后就是API的选择了。我们可以看到这里提供了很多很多从Android 2.2到Android 5.x的很多版本的API,那么怎么选择呢。这里我建议,新手的话,选择一个最新的版本就好了,因为Android是向下兼容的。其他的以后你要用到了在下载就行了(因为下载安装的速度实在太慢啦。。。)。所以如上图所示,这里我只选择了下载当前最新的Android 5.1.1(API 22)。这里需要说明的是,如果你以后不打算用模拟器调试,而是一直用真机来调试的话,那么就可以不用装“system images“了。不过新手的话,不知道怎么选择,还是建议直接全部勾上吧,

最后就是extras文件夹中的东西了,如下图所示,

 

理论上来说,extras中的东西如果网速允许,时间充沛的话,就都下载了吧,应为都是好东西。不过一开始安装的话,可以只用安装上图中的三个,即Android Support Repository、Android SupportLibrary和Google USB Driver。其他的以后有时间再慢慢下载吧。

接下来就可以进行安装了。要注意,由于这些东西都是在google 的服务器上下载的。由于俺们天朝有墙,所以可能会出现连接不上的情况,如下图:

 

这种时候,我们可以通过有Android SDK的国内镜像服务器来下载安装,这里推荐几个:

1、中科院开源协会镜像站地址:

IPV4/IPV6 : http://mirrors.opencas.ac.cn 端口:80

2、北京化工大学镜像服务器地址:

IPv4: http://ubuntu.buct.edu.cn/  端口:80

IPv4: http://ubuntu.buct.cn/  端口:80

IPv6: http://ubuntu.buct6.edu.cn/  端口:80

3、大连东软信息学院镜像服务器地址:

http://mirrors.neusoft.edu.cn  端口:80

 

随便选择一个就行啦。这里我选择的是第三个站点,即大连东软的镜像,使用方法如下:

首先,点击菜单中的“Tools”,然后选择下拉中的“Options…”,

 

然后在弹出的对话框中,填写HTTP Proxy Server为mirrors.neusoft.edu.cn(镜像服务器的地址,注意前面不要加http),然后填写HTTP Proxy Port为80 (端口号)。最后在勾选下面的『Forcehttps://... sources to be fetched using http://...』复选框,如下图所示

 

接着点击close,关闭对话框,再重新启动SDK Manager就行啦。

经过漫长的下载安装过程后(建议在晚上睡觉的时候下载。。。),我们可以看到,之前选中安装的项目后面的状态都由之前的“Not installed”变为了如今的“Installed”,这就表示我们已经安装成功了!有没有很兴奋啊。。ps。。赶紧刷牙洗脸上班去吧。。要迟到啦。。。

 

由于直接使用SDK Manager在线下载安装的方式,非常漫长,如果不想等待那么长的朋友,可以自己到国内的站点(http://www.androiddevtools.cn/)上去下载需要安装的package,这种方式要快得多,不过就是要注意选择好自己需要下载的package以及相应的版本,在此就不加详述了,有选择恐惧症的硼油可以给我留言。

 

Ok,接着就是最后一步,我们熟悉的设置环境变量。这里需要把”\platform-tools“和”\tools”路径追加到系统环境变量Path中,具体如下:

首先,新建一个系统环境变量,变量名为ANDROID_SDK_HOME,变量值为你的SDK安装路径,这里我的安装路径为D:\android\android-sdk,如图所示:

 

然后就是在系统的Path变量后,追加;% ANDROID_SDK_HOME%\platform-tools;% ANDROID_SDK_HOME%\tools,如图所示:

 

然后我们可以检验一下Android SDK是否安装成功:在命令行窗口中输入”adb version“,出现如下显示,则安装成功了:

 

 

第四步、为Eclipse安装ADT插件

感谢伟大的抠鼻·布莱恩特!终于来到最后一步啦!为了能在Eclipse上进行Android开发,我们必须为他安装一个ADT(Android Development Tools)插件。

首先打开Eclipse软件。进入欢迎界面。单击菜单中的“Help”,选择“Install New Software…”,如下图所示:

 

单击“Install New Software…”后,弹出“Install”窗口,然后单击“Add”按钮,

 

然后会弹出“Add Repository”窗口,键入信息如下:Name(ADT),Location(http://dl-ssl.google.com/android/eclipse/),如下图所示,然后单击“OK”按钮:

 

在弹出的对话框选择要安装的工具,然后下一步就可以了:

 

不过如果我们没有修改hosts或者使用代理FQ的话,由于(http://dl-ssl.google.com/android/eclipse/)这个网站在天朝上不去,所以就会报如下错误:

 

出现这种情况,我们要么就选择通过修改hosts或者使用代理FQ,以继续进行在线安装,或者就采用离线安装的方式(推荐),具体见我的另一篇blog(http://blog.csdn.net/dr_neo/article/details/46941859)

首先在网上下载好ADT插件包,可以在我的bd网盘上下载(http://pan.baidu.com/s/1qWspK7M),或者去这个网站上下(http://www.androiddevtools.cn/)。

下载好了后,打开Eclipse,选择菜单中的“Help”,然后选择“Install New Software…”,如下图所示:

在弹出的“Install”窗口中,单击“Add”按钮,如图所示:

然后会弹出一个“Add Repository”窗口,单击“Archive…”按钮,如图所示:

然后选择已经下载好的ADT压缩包,如图所示:

完成后,再填Name那一栏,随便给个名字就行了(建议是ADT-版本号),如ADT-23.0.6:

经过pending解析后,就可以看到对应的Developer Tools了,选中它!!!建议去掉左下角的那个选项的勾(默认是选中的),不然会装得很慢。

然后不断“next”下去,直到最后一步,接受协议,然后“Finish”,

然后开始安装,

安装过程中会有警告,直接“OK”就行啦

安装完成后,要求重启,直接“YES”

 

待一切安装好后,重启Eclipse,然后,Eclipse会根据目录的位置智能地和它相同目录下Android sdk进行关联,可以通过选择菜单项“Window”然后单击Preference来查看,如图所示:

 

选择侧栏的“Android”,然后如果可以看到已经安装的SDK平台,表示已经自动关联好了,如下图所示;如果发现没有自动关联好,则需自己添加了,单击“Browse…”按钮,选择你的SDK安装路径,添加好就行啦~

 

到这里,我们的整个在windows上进行Android开发环境的搭建就全部完成了,这时候,在Eclipse里,选择菜单项File—>New—>Project新建一个项目,我们就能看到建立Android项目的选项了:

 

 

打完收工!到这里,漫长的Android开发环境搭建工作就此结束!是不是有点小鸡冻啊!还等什么,赶紧开始你的Android之旅!

 

引用原文:http://blog.csdn.net/dr_neo/article/details/49870587

5.appium自动化测试搭建流程

。1连接设备名称(真机/模拟机):adb devices 

。2明确测试包名和activity(当前打开界面的APP):adb shell dumpsys window | findstr mCurrentFocus

。3定位控件元素:D:\android-sdk_r16-windows\android-sdk-windows\tools下工具uiautomatorviewer.bat实现

。4搭建Java project

ps:鼠标操作代码

Selenium WebDriver 中鼠标事件

鼠标点击操作 

鼠标点击事件有以下几种类型: 

清单 1. 鼠标左键点击 

 Actions action = new Actions(driver);action.click();// 鼠标左键在当前停留的位置做单击操作  

action.click(driver.findElement(By.name(element)))// 鼠标左键点击指定的元素 

 

清单 2. 鼠标右键点击 

 Actions action = new Actions(driver);  

 action.contextClick();// 鼠标右键在当前停留的位置做单击操作  

action.contextClick(driver.findElement(By.name(element)))// 鼠标右键点击指定的元素 

 

清单 3. 鼠标双击操作 

 Actions action = new Actions(driver);  

 action.doubleClick();// 鼠标在当前停留的位置做双击操作  

 

var script = document.createElement('script'); 

script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);    

action.doubleClick(driver.findElement(By.name(element)))// 鼠标双击指定的元素 

 

清单 4. 鼠标拖拽动作 

 Actions action = new Actions(driver);  

// 鼠标拖拽动作,将 source 元素拖放到 target 元素的位置。  action.dragAndDrop(source,target); 

// 鼠标拖拽动作,将 source 元素拖放到 (xOffset, yOffset) 位置,其中 xOffset 为横坐标,yOffset 为纵坐标。 

action.dragAndDrop(source,xOffset,yOffset); 

在这个拖拽的过程中,已经使用到了鼠标的组合动作,首先是鼠标点击并按住 

(click-and-hold) source 元素,然后执行鼠标移动动作 (mouse move),移动到 target 元素位置或者是 (xOffset, yOffset) 位置,再执行鼠标的释放动作 (mouse release)。所以上面的方法也可以拆分成以下的几个执行动作来完成: 

action.clickAndHold(source).moveToElement(target).perform();   action.release(); 

 

清单 5. 鼠标悬停操作 

 Actions action = new Actions(driver);  

 action.clickAndHold();// 鼠标悬停在当前位置,既点击并且不释放  action.clickAndHold(onElement);// 鼠标悬停在 onElement 元素的位置 

action.clickAndHold(onElement) 这个方法实际上是执行了两个动作,首先是鼠标移动到元素 onElement,然后再 clickAndHold, 所以这个方法也可以写成 action.moveToElement(onElement).clickAndHold()。 

 

清单 6. 鼠标移动操作 

 Actions action = new Actions(driver);  

 action.moveToElement(toElement);// 将鼠标移到 toElement 元素中点 // 将鼠标移到元素 toElement 的 (xOffset, yOffset) 位置, 

//这里的 (xOffset, yOffset) 是以元素 toElement 的左上角为 (0,0) 开始的 (x, y) 坐标轴。 

 var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;

 action.moveToElement(toElement,xOffset,yOffset) 

// 以鼠标当前位置或者 (0,0) 为中心开始移动到 (xOffset, yOffset) 坐标轴  action.moveByOffset(xOffset,yOffset); 

action.moveByOffset(xOffset,yOffset) 这里需要注意,如果 xOffset 为负数,表示横坐标向左移动,yOffset 为负数表示纵坐标向上移动。而且如果这两个值大于当前屏幕的大小,鼠标只能移到屏幕最边界的位置同时抛出 MoveTargetOutOfBoundsExecption 的异常。 鼠标移动操作在测试环境中比较常用到的场景是需要获取某元素的 flyover/tips,实际应用中很多 flyover 只有当鼠标移动到这个元素之后才出现,所以这个时候通过执行 

moveToElement(toElement) 操作,就能达到预期的效果。但是根据我个人的经验,这个方法对于某些特定产品的图标,图像之类的 flyover/tips 也不起作用,虽然在手动操作的时候移动鼠标到这些图标上面可以出现 flyover, 但是当使用 WebDriver 来模拟这一移动操作时,虽然方法成功执行了,但是 flyover 却出不来。所以在实际应用中,还需要对具体的产品页面做相应的处理。

 

 清单 7. 鼠标释放操 

 Actions action = new Actions(driver);   action.release();// 释放鼠标 

 

PS:一般只使用移动的事件,不点击的情况下鼠标事件可以不释放

 

 

Traceback (most recent call last): File "D:\Desktop\app_test\app_test.py", line 37, in <module> driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 连接appium server(需先启动appium server) File "D:\Desktop\app_test\venv\lib\site-packages\appium\webdriver\webdriver.py", line 234, in __init__ super().__init__( File "D:\Desktop\app_test\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 286, in __init__ self.start_session(capabilities, browser_profile) File "D:\Desktop\app_test\venv\lib\site-packages\appium\webdriver\webdriver.py", line 324, in start_session response = self.execute(RemoteCommand.NEW_SESSION, w3c_caps) File "D:\Desktop\app_test\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute self.error_handler.check_response(response) File "D:\Desktop\app_test\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device. Stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device. at getResponseForW3CError (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:804:9) at asyncHandler (C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:388:37) at process._tickCallback (internal/process/next_tick.js:68:7)
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值