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.用命令启动 ...
随机推荐
- kafka消费组创建和删除原理
0.10.0.0版本的kafka的消费者和消费组已经不在zk上注册节点了,那么消费组是以什么形式存在的呢? 1 入口 看下kafka自带的脚本kafka-consumer-groups.sh,可见脚本 ...
- Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?
1.64 GB 内存的机器是非常理想的, 但是 32 GB 和 16 GB 机器也是很常见的.少于 8 GB 会适得其反. 2.如果你要在更快的 CPUs 和更多的核心之间选择,选择更多的核心更好.多 ...
- 学习GlusterFS(一)
一.概述 1.GlusterFS是集群式NAS存储系统,分布式文件系统(POSIX兼容),Tcp/Ip方式互联的一个并行的网络文件系统,通过原生 GlusterFS 协议访问数据,也可以通过 NFS/ ...
- Markdown语法2
二 . 低频使用的语法 下面是相对用得少的markdown语法,但也值得学习学习. 10.区块(块引用) 要创建块引用,请在段落前添加一个 > 符号: 块引用支持多段落: 块引用支持嵌套,即引 ...
- 简单才是美! SpringBoot+JPA
SpringBoot 急速构建项目,真的是用了才知道,搭配JPA作为持久层,一简到底!下面记录项目的搭建,后续会添加NOSQL redis,搜索引擎elasticSearch,等等,什么不过时就加什么 ...
- Python使用递归绘制谢尔宾斯基三角形
谢尔宾斯基三角形使用了三路递归算法,从一个大三角形开始,通过连接每一个边的中点,将大三角型分为四个三角形,然后忽略中间的三角形,依次对其余三个三角形执行上述操作. 运行效果: 源代码: 1 impor ...
- SLF4J 报错解决:No SLF4J providers were found
1.解决SLF4J报错 我们在自己的项目中使用了SLF4J,或者引入了某开源项目时,他的项目中用了SLF4J,运行时会报如下的错误: SLF4J: Failed to load class " ...
- 演示默认学习用户scott,默认密码是tiger
默认学习用户scott,默认密码是tiger oracle@prd:/home/oracle$sqlplus /nolog SQL> conn scott/tiger ERROR: ORA-28 ...
- 启动jar包的shell脚本
在jar包的同级目录新建文件例如:app_jar.sh 然后填写如下内容: #!/bin/bash #source /etc/profile # Auth:Liucx # Please change ...
- 从乘法求导法则到BPTT算法
本文为手稿,旨在搞清楚为什么BPTT算法会多路反向求导,而不是一个感性的认识. 假设我们要对E3求导(上图中的L3),那么则有: 所以S2是W的函数,也就是说,我们不能说: 因为WS2 = WS2(w ...