原创python:windows解决genymotion appium adb 的问题。
首先请安装好genymotion 与并用其下载好要用的安卓版本。
(其中Oracle VM VirtualBox可以自己单独安装也可以在下载genymotion时选择包含vbox的)
参考https://www.cnblogs.com/whycxb/p/6850454.html
出现安装好安卓rom后没办法启动的,一般要在vbox的文件夹drivers\vboxdrv找到vboxdrv.inf 右键安装。不行,请自行百度。



主要是你要有adb应用程序,我这里选择的是原生安卓sdk附带的。(要设置环境变量)用genymotion的adb的话,在cmd启动adb前也是要把其路径加入环境变量。方法不赘述。

cmd > adb devices
可能会出现各种问题。 如果是找不到设备的。我网上查了好多方法都不行。
因为geny启动安卓模拟系统会启动adb ,很多人觉得应该是5037端口被占用了,你只要保证geny启用的adb与你cmd环境变量的adb是同一个就没有问题。
(假如你是被其他手机助手占用,请关闭手机助手,并结束adb)
taskkill /im adb.exe /f
主要你要做以下cmd命令
adb kill-server
adb start-server
adb devices
正常的话会出现设备了:

安装 appium
1。安装 appium-desktop (可视化的appium)
下载地址:https://github.com/appium/appium-desktop/releases/latest
说明下:找到相应的版本安装。这个没有必要设置环境变量。弄个桌面快捷方式就好了。
如果你不是为了ui界面来查找元素
2。你还可以选择无界面的命令行版appium。
jdk ->nodejs -> andriod sdk -> 安装appium -> appium-python-client
特别说明下安装appium时候可能会出错ctrl+c终止在重试,多试几次,很耗时。看你要选择npm国内镜像还是国外的。我建议网速还行的选择国外,安装完成比较不会出错。
npm install appium -g 安装好的appium不是exe格式,而是命令文件appium.cmd,路径:C:\Users\Administrator\AppData\Roaming\npm 你可以考虑加入环境变量。但是我用 appium -p 4723 -bp 4783启动是却出现了appium-desk的可视化版。所以推荐用python代码用
testlog=open(r'test.log','w',encoding='utf-8')
subprocess.Popen("C:\\Users\\Administrator\\AppData\\Roaming\\npm\\appium.cmd -p 4723 -bp 4783",stdout=testlog,shell=True)

最后放段小代码,大家参考下python3.6.
#coding=utf-8
#author='Shichao-Dong'
from appium import webdriver
import unittest,os
import time
import subprocess
#desired_caps这个要是 字典格式,value必须是字符串。不然会出错。
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0'
desired_caps['deviceName'] = 'MIX 2'
desired_caps['appPackage'] = 'com.sqsm.aimer'
desired_caps['appActivity'] = 'com.sqsm.aimer.activity.ActSplash'
desired_caps['noReset'] = 'true' #这个解定是否重新启动。默认是false相当于彻底退出程序进去,登录过的也要重新登。true是保持现状,不用重新登录。
desired_caps['fullReset'] = 'false'
subprocess.call('adb devices') #验证是否可以获取设备
testlog=open(r'test.log','w',encoding='utf-8')
#这个是启动命令行版appium,并把输出打印在test.log文件里,不然python consols太杂了。
subprocess.Popen("C:\\Users\\Administrator\\AppData\\Roaming\\npm\\appium.cmd -p 4723 -bp 4783",stdout=testlog,shell=True)
testlog.close()
time.sleep(10)
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(2) def login_func():
driver.find_element_by_id('com.sqsm.aimer:id/login_login_edit_txt').send_keys('')
driver.find_element_by_id('com.sqsm.aimer:id/password_get_txt').click()
driver.find_element_by_id('com.sqsm.aimer:id/login_login_edit_txt').click()
# c=input("请输入你收到的验证码:")
c=getCodeFromSms()
driver.find_element_by_id('com.sqsm.aimer:id/password_login_edit_txt').send_keys(c)
driver.find_element_by_id('com.sqsm.aimer:id/login_btn').click()
time.sleep(10)
if driver.find_element_by_id('com.sqsm.aimer:id/aimer_img'):
return 1
else:
return 0
#用adb 截取收到的短信验证码,这个由于不是真机,所以只能手动输入。
def getCodeFromSms(timeout=20):
# os.system('adb kill-server')
# os.system('adb start-server')
# os.system('adb devices')
subprocess.call("adb logcat -c")
cmd = 'adb logcat -d |findstr D/Mms/Txn'
n = 0
print('xxxxx')
while n < timeout:
smscode = os.popen(cmd).read()
print(smscode)
if smscode != "":
smscode = smscode.split("验证码:")[1].split(",")[0]
print("code is {}:".format(smscode))
return (smscode)
# break
else:
time.sleep(1)
n += 1
print('已等待:{}秒'.format(n))
continue
print('短信接收失败!')
a=input('请输入你收到的验证码:')
return a class TestUi(unittest.TestCase):
def setUp(self):
super().__init__() def tearDown(self):
super().__init__()
driver.quit()
def test_login(self):
self.assertEqual(login_func(),1,"test result:login function is ok")
time.sleep(5) if __name__ == '__main__':
try:
unittest.main()
finally:
os.popen("taskkill /f /im node.exe") driver.quit()
原创python:windows解决genymotion appium adb 的问题。的更多相关文章
- 原创博客>>>解决粘包问题的方法
目录 原创博客>>>解决粘包问题的方法 原创博客>>>解决粘包问题的方法 服务端: import socket import struct service=sock ...
- 深入super,看Python如何解决钻石继承难题 【转】
原文地址 http://www.cnblogs.com/testview/p/4651198.html 1. Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通 ...
- paip.python错误解决24
paip.python错误解决 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...
- paip.python错误解决23
paip.python错误解决 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...
- 深入super,看Python如何解决钻石继承难题
1. Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object): def __init_ ...
- 如何在python脚本里面连续执行adb shell后面的各种命令
如何在python脚本里面连续执行adb shell后面的各种命令 adb shell "cd /data/local && mkdir tmp" adb shel ...
- C++开发python windows版本的扩展模块示例
C++开发python windows版本的扩展模块示例 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 VS版本:vs2015社区版(免费) 相关工具下载 ...
- 安装win8/win10提示无法在驱动器0分区上安装windows解决方法
在通过U盘或光盘安装win8/win8.1/win10系统时,不少用户遇到无法安装的问题,提示“无法在驱动器0的分区1上安装windows”,格式化分区1也不能解决,进而提示Windows无法安装到这 ...
- Python windows serial
Python windows serial 一.参考文章: Serial port programming http://www.cnblogs.com/2zhyi/p/3405339.html py ...
随机推荐
- Spring注入静态变量的方法,以及CXF如何获取客户端IP
1.如果使用@Resource注解来注入静态变量的,服务器启动就会报错的.可以新增一个set方法,同时在set方法上用@Resource注解来注入. 2.或者直接在Spring的配置文件中使用< ...
- 搭建RESTful API来使用Fabric Node SDK 开篇
在Balance-Transfer中,有关于Node SDK比较完备的例子. SDK的官方文档在这里:https://fabric-sdk-node.github.io/ Balance-Transf ...
- 分布式协议学习笔记(一) Raft 选举
Raft官网 官方可视化动画1 官方可视化动画2 论文中文翻译 论文英文地址 感觉作为paxos的升级精简版 Raft在设计之初就以容易理解为目标 看完资料 脑海里都有了大概的轮廓. 有了这些详细的资 ...
- OpenSessionViewFilter
OpenSessionViewFilter是spring提供的一个针对hibernate的一个支持类,其主要的意思是=在发起一个页面请求的时候打开session,并且保持session直到请求结束,具 ...
- Json 简记
JSON : JavaScript Object Notation ---- JavaScript 对象表示语法 Json 比 XML 小,比 xml 快 ==================== ...
- 学习Acegi应用到实际项目中(2)
Acegi应用到实际项目中(1)是基于BasicProcessingFilter的基本认证,这篇改用AuthenticationProcessingFilter基于表单的认证方式. 1.authent ...
- validatord的使用方法理解
今天是周日,自己已经在公司上班一周啦,可是这是我感觉最难熬 一周之一,上一次还是在高考失利的时候,自己整整一个月没有出去,在家里呆着,不知道干什么,这一此自己也是,感觉自己很难在这个公司熬下去,但是, ...
- .gitignore无效解决方案以及git rm和rm的区别
一. gitignore 先来了解一下gitignore的常用语法 斜杠“/”表示目录, 是否已斜杠开头有很大区别,如 /build 与 build/ 的区别:其中 build/ 表示不管在哪个位置的 ...
- Linux连不上校园网怎么办?
原本,在我们学校我只要连上WiFi打开浏览器, 它就会自动重定向到校园网登录的界面.但是今天浏览器并没有自己打开登录页面,一直在加载.于是我想直接登录路由器,在地址栏输入192.168.0.1,结果它 ...
- 【git 报错】Could not read from remote repository.Please make sure you have the correct access rights.
我们在使用git clone 或其他命令的时候,有时候会遇到这类问题,如图: and the repository exists. fatal: Could not read from remote ...