1. Appium Appium+Python 在切换到 webview 下,click () 事件后界面无响应
脚本如下:
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time
import os
server = r' http://localhost:4723/wd/hub' # Appium Server, 端口默认为4723
desired_capabilities = {
'platformName': 'Android', # 平台
# 需替换成你的driverName,如果不知 道自己的设备名,用adb命令去查看一下
'driverName': 'c611c3b4', #手机名称
'platformVersion': '10.0.0', # 安卓版本
'appPackage': 'com.webmobile.activity', #APP包名
'appActivity': '.MainActivityP', # APP启动名
'noReset':True
}
driver = webdriver.Remote(server, desired_capabilities) # 连接手机和APP
c=driver.contexts
print(c[1])
driver.switch_to.context(c[1])
driver.find_element_by_xpath('//*[@id="username"]').click()
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[4]/div[1]/button[2]').click()
执行到这一步,发现没问题,没有报错,但是click没有定位到,在浏览器的conlse
定位OK,说明xpath没有毛病,怎么办?去他妈的,放弃治疗,本来想研究一下APP自动化,感觉坑太多,兄弟们,你们加油!
2. appium怎么查看web元素
如果是进行wap端测试
1、使用appium集成的chromeDriver。在手机端安装chrome浏览器,下载对应版本的chromeDriver,使用appium初始化Chrome浏览器相关设置,可以启动chrome,利用chromedriver实现自动化。
设置chrome浏览器名称,activity,packageName等
2、如果是app内嵌webview,需要初始化driver后,利用driver.context("WEBVIEW_1"),进行切换到webview,进行元素定位或者自动化,这种前提需要app代码中开启支持webview的debug模式
3、其他方式,启动源生浏览器,但这种方式是将源生浏览器当做一个app来使用,可能启动activity不允许三方进行调用,这样会导致失败
3. APP自动化测试appium环境怎么搭建
APP自动化测试appium环境怎么搭建?1
/12
下载安装node.js (注意操作系统,32位,64位)。安装完成后,检查是否安装成功:cmd, 输入node -v , 显示安装版本信息,则安装成功,如下图所示:
2
/12
安装JDK配置环境变量
JDK安装,以及环境变量设置
下载eclipse (注意操作系统,32位,64位),Mars版。
3
/12
配置Android SDK环境
下载Android SDK,下载地址www.androiddevtools.cn,如下图所示:
4
/12
安装保证Level 17或以上版本 api,如下图所示:
5
/12
Android操作系统选择安装用于模拟机,如下图所示:
6
/12
配置环境变量
a>新增变量:ANDROID_HOME,设置值为安装目录: l例如 E:\android-sdk
b>Path中新增参数:%ANDROID_HOME%\tools; %ANDROID_HOME%\platform-tools
7
/12
验证是否安装配置成功
cmd: 输入 android, 弹出SDK Manager窗口。
8
/12
ADT安装
打开eclipse,help>install new software, 输入https://dl-ssl.google.com/android/eclipse
下载时间会比较久,也可以考虑直接下载后本地安装,如下图所示:
9
/12
安装完成,重启Eclipse,如下图所示:
10
/12
安装Appium,下载: http://appium.io,如下图所示:
11
/12
设置环境变量
Appium目录和他的bin目录都加入环境变量PATH:例如
APPIUM_HOME: E:\App\Appium
Path: %APPIUM_HOME%\node_moles\.bin
12
/12
运行appium-doctor来验证Appium的所有依赖是否配置正确。
4. appium怎么切换到webview
print driver.contexts
driver.switch_to.context('WEBVIEW')
els = self.driver.find_elements_by_xpath('//android.widget.TextView')
print len(els)
print els[0].text
appium 的log信息:
info: --> POST /wd/hub/session/ee2b3cf6-efa3-4bfe-93d9-05e61cf36001/elements {"u
sing":"xpath","sessionId":"ee2b3cf6-efa3-4bfe-93d9-05e61cf36001","value":"//andr
oid.widget.TextView"}
info: [debug] Proxying command to 127.0.0.1:9515
info: [debug] Making http request with opts: {"url":"http://127.0.0.1:9515/wd/hu
b/session//elements","method":"POST","json":{"us
ing":"xpath","sessionId":"ee2b3cf6-efa3-4bfe-93d9-05e61cf36001","value":"//andro
id.widget.TextView"}}
info: [debug] Didn't get a new command in 60 secs, shutting down...
info: Shutting down appium session
info: [debug] Pressing the HOME button
5. 如何启用和使用Appium的WebView于iOS自动化
在App开发过程中,很容易用到第三方的WebView控件,这个属于移动端混合型App。在我们做自动化测试的过程中,就要对这种情况进行处理,最通用的办法就是先将appium切换到webview模式然后按查找web元素的方法对WebView里面的元素进行操作即可。
6. 读懂appium原理,看这篇就够了
话不多说,直接上干货:
appium的整体架构是C/S模式,整体流程(返回顺序为逆向):
脚本请求 ——> 4723端口appium server ——> 解析参数给PC端4724端口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar ——> Bootstrap.jar把命令发给uiautomator
1、脚本请求 ——> 4723端口appium server :
首先我们要开启appium服务,即Appium server,也就是在命令行用appium命令打开的东西,默认监听4723端口。4723端口专门和脚本打交道,基于WebDriver协议。webdriver是按照server – client的经典设计模式设计的,作用就是启动基于WebDriver Wire协议的appium服务,接下来脚本与appium server的通信实际上是一个HTTP request请求给appium server,在请求的body中,会以WebDriver Wire协议规定的 JSON 格式的字符串来告诉appium服务我们希望设备接下来做什么事情。读到这里,难免有同学会有疑问了,因为有一些文档上面说脚本发送请求是基于Json wire protocol协议的,首先这是完全正确的,接下来就解释一下:
appium中的Json wire protocol继承自selenium的webdriver wire protocol,并进行了扩展,使得Json wire protocol能够控制不同的移动设备的行为。如果大家觉得对于webdriver这个名词觉得比较陌生的话,接下来说一个词肯定熟悉 - Selenium。Selenium是一个浏览器自动化操作框架。Selenium主要由三种工具组成。第一个工具SeleniumIDE,是Firefox的扩展插件,支持用户录制和回访测试,录制/回访模式存在局限性,对许多用户来说并不适合,因此第二个工具——Selenium WebDriver提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。最后一个工具——SeleniumGrid帮助工程师使用Selenium API控制分布在一系列机器上的浏览器实例,支持并发运行更多测试。在项目内部,它们分别被称为“IDE”、“WebDriver”和“Grid”。
那么webdriver wire protocol又是什么呢:
在我们创建一个WebDriver的过程中,Selenium首先会确认浏览器的native component是否存在可用而且版本匹配。接着就在目标浏览器里启动一整套Web Service,这套Web Service使用了Selenium自己设计定义的协议,名字叫做 The WebDriver Wire Protocol, 只不过对应到我们这里的浏览器指的是Appium。
WebDriver Wire协议是通用的,也就是说不管是FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。对应到Appium,可以理解为是AppiumDriver。接下来,我们调用WebDriver的任何API,都需要借助一个 ComandExecutor 发送一个命令,实际上是一个HTTP request给端口上的Web Service。在我们的HTTP request的body中,会以WebDriver Wire协议规定的 JSON 格式的字符串来告诉Selenium我们希望浏览器(设备)接下来做什么事情。
说到这里可能会有疑问了,上面说到的是脚本请求对设备进行操作,但前提是,我们要对谁进行操作测试呢?这里就引入一个新名词:desiredCapabilities。了解了上述之后,再去看脚本怎么将desiredCapabilities传递给appium server就明白多了,脚本通过Json Wire Protocol协议以json格式发送测试设备信息给server端,测试设备信息被携带在Desired Capabilities中,这个东西实质上是一个key-value形式的对象,Desired Capabilities最重要的作用是告诉server本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是android还是ios?如果android的话我们要测试哪个app?server的这些疑问Desired Capabilities都必须给予解答,否则server不买账,针对我们现在所说的安卓,它带来的影响就是无法完成app的启动。
那么,将测试设备信息告知之后,是不是就可以开始进行测试了呢?答案是:NO。这里又要引入一个名词:session。session就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。client 创建1个session,在该session中通过http向appium server发送请求,appium server解析请求,完成相应操作并返回response。
Session在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息,对应到这里其实就是desiredCapabilities中的配置信息参数。脚本通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了,由于这是第一次请求创建session,所有并没有一个已创建的session id,所以appium server会调用android driver(appium升级到2.0.0后,原有的AppiumDriver函数变成抽象函数了,需更改为AndroidDriver)为client生成一个session并且生成一个与此session相关联的session id,这个 session id将被在本次响应中返回给客户端保存,当下次脚本发出操作请求时就会自带session id为唯一标识,代表所打开的设备,Appium server会按照此session id把这个session检索出来使用,脚本向appium server发送的请求即是存在于创建的session中的。
Session 的作用就是它在appium服务上保持设备的状态信息,供在任何时间进行访问,在多次的操作行为中,存储在 Session对象中的配置信息将不会丢失,而是在整个用户会话中一直存在下去,整个测试进程中设备与程序的联系不会断开,也不需要每次都发送带配置信息的请求,程序都知道对哪个设备进行测试操作。当测试结束后,需关闭webdriver,driver.quit()会关闭所有关联窗口和session,并且也会把进程也关闭。
2、解析参数给PC端4724端口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar ——> Bootstrap.jar把命令发给uiautomator:
创建session成功之前,就已将bootstrap.jar放入手机中,并开启设备上的基于appium bootstrap的socket服务,绑定本机和boostrap通信的端口号4724用于和Android设备通讯,默认监听4724端口,等待client的连接。
Appium server将脚本的请求解析后给到4724端口,通过设备的4724端口转发解析后的请求, 此时,对于socket服务来说,appium server就充当了client的角色,appium server通过4724端口主动去请求设备上的socket服务,即向socket服务发送请求,即bootstrap.jar,Bootstrap.jar再把Appium的命令转换成uiautomator的命令来让uiautomator进行处理。有请求就有返回,socket接收到请求后会做出响应,原路返回给脚本,然后脚本再进行下一次的请求。
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。appium和手机的通信过程,主要是数据交换的一个过程,socket的作用是就是为了实现双向通信,它需要一对端口号,对应到这里就是4724,手机端的bootstrap就是socket-server端,appium server就是socket-client端。
关于socket的通信原理,先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
7. 请问各位大侠,Web测试和App测试有什么区别
Web测试和App测试区别为:监测不同、更新不同、回归测试不同。
一、监测不同
1、Web测试:Web测试需监测响应时间、CPU、Memory。
2、App测试:App测试除了需监测响应时间、CPU、Memory外,还需监测 流量、电量等。
二、更新不同
1、Web测试:Web测试只要更新了服务器端,客户端就会同步会更新。
2、App测试:App测试更新需要手动更新客户端。
三、回归测试不同
1、Web测试:Web测试不需要进行回归测试。
2、App测试:App测试所有核心版本都需要进行回归测试。
8. app测试和web测试的区别, web测试和app测试的区别
一、测试方式不同
1、app测试:指对移动应用进行测试,包括自动化测试和人工测试等。
2、web测试:是软件测试的一部分,是针对Web应用的一类测试。
二、测试内容不同
1、app测试:模拟用户操作对应用程序进行黑盒测试,并使用Cucumber作为自然语言来编写测试用例。还会对应用测试操作进行记录,以帮助开发者进行测试回顾。
2、web测试:包括内容测试、界面测试、功能测试、性能测试、兼容性测试、安全性测试等。
三、特点不同
1、app测试:可通过增加预先测试环节来确认环境已经测试就绪,同时还能知道哪些错误是环境不稳定引起的,哪些是一般的测试用例错误。
2、web测试:通过测试可以尽可能地多发现浏览器端和服务器端程序中的错误并及时加以修正,以保证应用的质量。
9. appium怎么查看web元素
查找当前可用的上下文信息的时候,用如下代码:
contexts=self.driver.contexts
for
cotext
in
contexts:
print
cotext
根据输出的信息,如果有WebView信息的时候,可以切换:
driver.switch_to.context("WEBVIEW")
或是
driver.context(“WEBVIEW”)
但是一直找不到WebView信息,如图二所示,此时就没有办法进行切换。
10. 如何启用和使用Appium的WebView于iOS自动化
App发程容易用第三WebView控件属于移端混合型App我做自化测试程要种情况进行处理通用办先appium切换webview模式按查找web元素WebView面元素进行操作即