python appium server代码启动和关闭遇到的坑
第一次使用博客,小白级,互相交流,有说的不对的地方欢迎来喷!!!
自动化的目的就是减少人工成本,如果每次跑自动化用例时都要手动起appium客户端,太费事了~~故,将appium server的调起和关闭写在代码中是必要的一步。
在步骤中说坑。。。(ps:小白的坑,大神可能会嘲笑~~呼呼~~)
1.将appium客户端打开,能够看到启动server其实是这句话> Launching Appium server with command: D:\Program Files (x86)\Appium\node.exe lib\server\main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-version 23 --automation-name Appium --device-name "MI 3W" --language en --log-no-color,如下图:
需要将node.exe替换成路径node_modules\appium\。cmd命令其实就是node一下上述的command
2.拿到了命令只要写入进代码就行了。这里用到了os模块,最简单的os.system就可以满足。
关于路径的空格、()、\、"的转义最是坑爹
先将D:\Program Files (x86)\镜像成一个w:,然后转义\\和\",
测试机的Android版本对应的appium version和手机device name是测试机独有属性,所以定义函数时加了这两个参数
具体代码如下:
# coding=utf-8
import os
import time # os.system("subst w: \"D:\Program Files (x86)\"") #镜像用一次就行,所以我注释掉了
def start_AppiumS(devicename,level):
t = "start node w:\\Appium\\node_modules\\appium\\lib\\server\\main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-version "+level+" --automation-name Appium --device-name \"" + devicename + "\" --language zh_CN --log-no-color"
os.system(t)
time.sleep(2)
return
这里要刻意强调一下,os.system会阻塞进程,为避免不影响执行下一步,在命令前面一定要加start
到这里为止,启动appium server已经搞定,下面开始写杀appium server
1.杀appium server主要是在于取得node的进程端口号
可用命令查询端口号 netstat -aon |findstr 4723
用os.popen获取执行命令后的返回值,从中提取出需要的pid端口号
说一下此处我遇到的坑吧,先上图
按4723查到的进程有很多,os.popen获取后是以字符型存储的,且有许多空格。此处用了最笨的小白方法,去空格分割字符串~~~~~汗汗汗-_-||
代码如下:
def kill_AppiumS():
process = os.popen("netstat -aon |findstr 4723").read()
pid = process.replace(' ','').split(" ")[2]
print(pid)
m = os.popen("taskkill -f -pid %s" % pid)
print(m.read())
有不对或者需要改进的地方,欢迎大神吐槽~~
python appium server代码启动和关闭遇到的坑的更多相关文章
- Python+Appium学习之启动手机APP或者浏览器
一.启动浏览器:pycharm中python脚本如下: from appium import webdriver desired_caps ={ 'platformName':'Android', ' ...
- Appium 脚本代码中启动appium server
import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.service.local.Appiu ...
- Appium Server源码分析之作为Bootstrap客户端
Appium Server拥有两个主要的功能: 它是个http服务器,它专门接收从客户端通过基于http的REST协议发送过来的命令 他是bootstrap客户端:它接收到客户端的命令后,需要想办法把 ...
- (干货分享)mac python+appium环境搭建
因为mac本自带python2.x(不建议卸载,因为本本本身有很多依赖与此),所以装python3的过程极其坎坷,勉强装好后也总是各种报错.这次装appium环境,直接把原来的python3卸了,用h ...
- 记录下通过Java代码打开cmd启动appium server及在使用过程中碰到的问题
1.appium server启动后,执行测试脚本,appium日志报错,提示appium setting未安装(原因是小米手机在用appium desktop调试时总是提示是否安装appium se ...
- Appium Server 源码分析之启动运行Express http服务器
通过上一个系列Appium Android Bootstrap源码分析我们了解到了appium在安卓目标机器上是如何通过bootstrap这个服务来接收appium从pc端发送过来的命令,并最终使用u ...
- ros 使用python代码启动launch文件
在开发中我们经常会遇到使用python代码启动launch文件这样的问题.一般的做法是使用subprocess调用roslaunch.但是这种方法使用起来并不方便.要涉及到自己去控制进程的状态.由于r ...
- (appium+python)UI自动化_02_appium启动手机app
前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开 ...
- 移动端UI自动化Appium测试——Appium server两种启动方式
执行自动化测试之前,需要先运行appium server,这样才能形成server与java client的通信,启动server有两种方式,一种是命令,一种是按钮图标,具体使用如下: 1.用命令启动 ...
随机推荐
- MariaDB CTE公用表达式
公用表达式(Common Table Expressions,简称CTE) Maria DB 版本为10.2.2以上的才支持 WITH 语法 CTE 介绍 WITH关键字表示公用表表达式(CTE) 它 ...
- springboot使用jar包方式启动,找不到resources目录中的配置文件(运行时)FileNotFoundException
将springboot项目打包成jar包,使用 java -jar jar包进行启动,富文本框使用ckeditor+ckfinder: 因为ckfinder自定义配置文件了,上传图片时出现了异常 De ...
- flash的TotalFrames显示undefined
通过js来操作flash的时候,获取到总帧数的是属性.TotalFrames,而不是属性TotalFrames().在asp.net中,js放在最后可以在一定程度上避免当前flash没有加载完,导致获 ...
- 一个注解@Recover搞定丑陋的循环重试代码
使用背景 在实际项目中其中一部分逻辑可能会因为调用了外部服务或者等待锁等情况下出现不可预料的异常,在这个时候我们可能需要对调用这部分逻辑进行重试,代码里面主要就是使用for循环写一大坨重试的逻辑,各种 ...
- Spark学习摘记 —— Pair RDD转化操作API归纳
本文参考 参考<Spark快速大数据分析>动物书中的第四章"键值对操作",由于pair RDD的一些特殊操作,没有和前面两篇的API归纳放在一起做示例 前面的几个api ...
- MySQL怎么用命令修改字段名
一.SQL MySQL怎么用命令修改字段名的 -- alter table 表名 change 旧属性 新属性 新的数据类型 ==>(可以不写) COMMENT '备注' ALTER TABLE ...
- python办公自动化系列之金蝶K3(三)
小爬在之前的两篇文章 [python办公自动化系列之金蝶K3自动登录(一)].[python办公自动化系列之金蝶K3自动登录(二)]带大家系统搞定了K3客户端的自动登录难题,但是搞定[自动登录]只是我 ...
- 自己给idea下载Scala插件
场景:有时候在idea上直接下载的scala可能因为太新所以有bug,需要手动下载插件 经验:自己下载完之后发现比较老的版本idea根本不让你装,只能装一些跟idea上推荐的scala相近的版本,感觉 ...
- 如何实现多个接口Implementing Multiple Interface
4.实现多个接口Implementing Multiple Interface 接口的优势:马克-to-win:类可以实现多个接口.与之相反,类只能继承一个超类(抽象类或其他类). A class c ...
- Column ‘name’ in where clause is ambiguous;
内容 一.异常信息 严重: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw except ...