zoukankan      html  css  js  c++  java
  • 原创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

    参考:安装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代码用 

    1 testlog=open(r'test.log','w',encoding='utf-8')
    2 subprocess.Popen("C:\\Users\\Administrator\\AppData\\Roaming\\npm\\appium.cmd -p 4723 -bp 4783",stdout=testlog,shell=True)

    最后放段小代码,大家参考下python3.6.

     1 #coding=utf-8
     2 #author='Shichao-Dong'
     3 from appium import webdriver
     4 import unittest,os
     5 import time
     6 import subprocess
     7 #desired_caps这个要是 字典格式,value必须是字符串。不然会出错。
     8 desired_caps = {}
     9 desired_caps['platformName'] = 'Android'
    10 desired_caps['platformVersion'] = '6.0'
    11 desired_caps['deviceName'] = 'MIX 2'
    12 desired_caps['appPackage'] = 'com.sqsm.aimer'
    13 desired_caps['appActivity'] = 'com.sqsm.aimer.activity.ActSplash'
    14 desired_caps['noReset'] = 'true' #这个解定是否重新启动。默认是false相当于彻底退出程序进去,登录过的也要重新登。true是保持现状,不用重新登录。
    15 desired_caps['fullReset'] = 'false'
    16 subprocess.call('adb devices') #验证是否可以获取设备
    17 testlog=open(r'test.log','w',encoding='utf-8')
    18 #这个是启动命令行版appium,并把输出打印在test.log文件里,不然python consols太杂了。
    19 subprocess.Popen("C:\\Users\\Administrator\\AppData\\Roaming\\npm\\appium.cmd -p 4723 -bp 4783",stdout=testlog,shell=True)
    20 testlog.close()
    21 time.sleep(10)
    22 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    23 time.sleep(2)
    24 
    25 def login_func():
    26     driver.find_element_by_id('com.sqsm.aimer:id/login_login_edit_txt').send_keys('1380000000')
    27     driver.find_element_by_id('com.sqsm.aimer:id/password_get_txt').click()
    28     driver.find_element_by_id('com.sqsm.aimer:id/login_login_edit_txt').click()
    29     # c=input("请输入你收到的验证码:")
    30     c=getCodeFromSms()
    31     driver.find_element_by_id('com.sqsm.aimer:id/password_login_edit_txt').send_keys(c)
    32     driver.find_element_by_id('com.sqsm.aimer:id/login_btn').click()
    33     time.sleep(10)
    34     if driver.find_element_by_id('com.sqsm.aimer:id/aimer_img'):
    35         return 1
    36     else:
    37         return 0
    38 #用adb 截取收到的短信验证码,这个由于不是真机,所以只能手动输入。
    39 def getCodeFromSms(timeout=20):
    40     # os.system('adb kill-server')
    41     # os.system('adb start-server')
    42     # os.system('adb devices')
    43     subprocess.call("adb logcat -c")
    44     cmd = 'adb logcat -d |findstr D/Mms/Txn'
    45     n = 0
    46     print('xxxxx')
    47     while n < timeout:
    48         smscode = os.popen(cmd).read()
    49         print(smscode)
    50         if smscode != "":
    51             smscode = smscode.split("验证码:")[1].split(",")[0]
    52             print("code is {}:".format(smscode))
    53             return (smscode)
    54             # break
    55         else:
    56             time.sleep(1)
    57             n += 1
    58             print('已等待:{}秒'.format(n))
    59             continue
    60     print('短信接收失败!')
    61     a=input('请输入你收到的验证码:')
    62     return a
    63 
    64 class TestUi(unittest.TestCase):
    65     def setUp(self):
    66         super().__init__()
    67 
    68     def tearDown(self):
    69         super().__init__()
    70         driver.quit()
    71     def test_login(self):
    72         self.assertEqual(login_func(),1,"test result:login function is ok")
    73         time.sleep(5)
    74 
    75 
    76 if __name__ == '__main__':
    77     try:
    78         unittest.main()
    79     finally:
    80         os.popen("taskkill /f /im node.exe")
    81 
    82         driver.quit()
    83  

      




    知识无穷尽也。

  • 相关阅读:
    美剧基本演绎法福尔莫斯的一句话
    HowToDoInJava 其它教程 1 &#183; 翻译完成
    我们关于版权保护的意见与建议
    HowToDoInJava Spring 教程·翻译完成
    【转】21世纪律师办公自动化的一个调查
    iBooker AI+财务提升星球 2020.4 热门讨论
    布客·ApacheCN 翻译校对活动进度公告 2020.5
    数据可视化的基础知识·翻译完成
    Java 高效编程(Effective Java)中文第三版(补档)
    布客&#183;ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.4
  • 原文地址:https://www.cnblogs.com/mapu/p/8669577.html
Copyright © 2011-2022 走看看