zoukankan      html  css  js  c++  java
  • Genymotion模拟器的安装及脚本制作

    在上一篇博文中,讲到这一篇会介绍Genymotion的安装方式。大家都知道,Genymotion是一个模拟器,或许会质疑了,直接连接真机就好了,为何还要配置模拟器?我也是用真机实践后,才选择安装的模拟器。原因是:sdk自带的uiautomatorviewer工具,不支持android8.0及以上的版本。社会在进步,移动设备更是高速发展,现在使用的手机很多都已高于这个版本。网络上有相对的解决办法,解决办法在文末给出,但我还是觉得麻烦,所以自己还是选择安装模拟器。

    Genymotion配置

    在下载genymotion时,需要有官网账号,才可以下载,所以可以先注册个账号,自行注册。

    Genymotion下载

    下载地址:https://www.genymotion.com/download/,选择对应系统下载对应的genymotion,如下图所示:

    官方的genymotion操作手册,可以参考使用:https://docs.genymotion.com/latest/Content/01_Get_Started/Get_started.htm

    Genymotion安装

    安装过程那就更简单了,打开下载的安装文件,一路next,直至安装成功,自动会安装Oracle VM VirtualBox,该软件是一款虚拟机,支持的平台很广泛。在genymotion中,可以使用该软件配置网络、系统等。

    Genymotion添加手机系统

    双击已安装好的genymotion,进入到启动页,如下:

    配置SDK

    SDK是上一篇博文介绍配置的,还没安装好的,可参见上一篇博文,配置如下:

    SDK的地址,就是SDK的实际安装地址,建议不要包含中文路径。

    配置好了SDK后,就可以下载各种型号的手机系统了,如下所示,新版的genymotion页面,比老版本好看多了

    安装手机系统并启用

    如何安装手机系统?选择自己需要的手机型号,点击右侧按钮处,点击install即可,如下:

    静候,等待下载完,下载速度,看大家的网速了,大小也就一两百兆左右。

    下载完成之后,如何使用?点击右侧的start按钮即可,如下:

    start相当于就是我们日常使用手机的时候,开机操作,系统启动成功之后,出现如下界面:

    说明genymotion模拟器就安装好了,简单几步操作,安装还是很简单的。

    查看连接设备

    在查看设备之前,需要启用开发者模式,相当于,我们真机在传输数据时,也是需要开启开发者模式,并通过usb数据线连接电脑,完成数据的传输,是一个道理。

    模拟器如何开启开发者模式?一看图就明白,如下图所示:

    进入到关于手机页面,连续点击版本号七次,即可开启开发者模式,记住,一定是七次,不能少。

    开启了开发者模式之后,USB调试也需要开启,跟真机操作一样的,如下图:

    手机已经处于开发者模式,并允许调试了,那如何查看设备连接是否正常了?这就需要引用adb命令了,adb命令在安装sdk的时候,就会自动安装。今天不深入分享adb命令的使用,只做简单介绍。查看设备连接的命令是:

    adb devices

    输入该命令后,出现如下图所示,则说明有设备连接的

    到这,genymotion模拟器就配置成功了,是不是非常的简单。 

    脚本制作

    app安装

    针对自家产品开发脚本,那自然是需要在模拟器中安装一个自家的app的,那如何安装呢,小小一个命令即可完成,命令如下:

    adb install C:UsersleoDesktopk.apk

    adb依然是之前所提到的adb命令;install顾名思义,安装的意思;后面的路径则是apk包存放的位置。执行上述命令后,出现如下图所示,则说明app安装成功:

    app卸载

    刚描述了app的安装,那卸载又是如何操作呢?有些朋友可能会想到命令adb uninstall C:UsersleoDesktopk.apk么?命令是这个,但却不是接路径了,需要对应app的包名。

    包名如何获取,在模拟器中打开你将要卸载的app,输入命令:

    adb shell dumpsys window w |findstr / |findstr name=

    即可获得对应app的包名了,卸载app的命令则是:

    adb uninstall com.XXX.XXX

    执行该命令后,模拟器中对应的app则会被卸载。

    元素定位

    元素定位,跟UI自动化的定位差不多,也无非就是id、name、xpath那些,主要是看自己如何使用,能够简单却又准确无误的定位到元素。

    元素定位,我们借助sdk中自带的工具:uiautomatorviewer.bat,工具路径在:D:android-sdk-windows ools文件夹下,具体路径看个人安装sdk的路径,我只是个举例。

    先在模拟器中打开对应的app,再打开uiautomatorviewer.bat工具,在工具中则会看到app对应的界面,如下所示:

    从上图可看出,左侧面板就是app对应的界面,右侧则是元素的层级显示,鼠标点击对应的元素,右侧就会展示对应的详情路径,便可实现元素的定位。该工具类似于火狐浏览器中的firebug工具一样,是便于进行元素提取,进行元素定位的。

    代码示例

    写到这,我已按耐不住的想上一段自己曾几何时的一段线性代码,很普通的一段线性代码。实现一个简单的登录操作,如下:

    没有断言,没有特殊逻辑,不喜勿喷,基于python刚入门写的。做为新入门的朋友来说,可以参考一下,如果没有参考价值,那忽略即可。

    复制代码
    import selenium
    import time
    from appium import webdriver
    
    
    desired_caps = {
        'platformName': 'Android',
        'platformVersion': '4.4.4',
        'deviceName': 'S5',
        'appPackage': '',   #包名
        'appActivity': '',    #app入口
        'udid': '192.168.66.101:5555',  # genymotion设备
        'noReset': 'true',
        'unicodeKeyboard': 'True',
        'resetKeyboard': 'True',
    }
    print('selenium version = ', selenium.__version__)
    
    driver = webdriver.Remote('http://192.168.1.103:4723/wd/hub', desired_caps)
    print("服务启动成功")
    time.sleep(3)
    
    
    account = driver.find_element_by_id('id/rel_content')
    account.find_element_by_id('id/edit_acount')
    driver.press_keycode(61)
    print("换行操作")
    
    if driver.find_element_by_id('id/img_clear_acount'):
        clr_account = driver.find_element_by_id('id/img_clear_acount').click()
        print("账号清除成功")
    
    account.send_keys('10086')
    print("账号输入完毕")
    time.sleep(2)
    
    driver.press_keycode(61)
    print("换行操作")
    
    password = driver.find_element_by_id('id/rel_content')
    password.find_element_by_id('id/edit_pass')
    password.send_keys('123456')
    print("密码输入完毕")
    driver.find_element_by_xpath('//android.widget.TextView[@text="登 录"]').click()
    print("点击登录按钮")
    
    
    print('登录成功')
    time.sleep(5)
    driver.quit()
    复制代码

    代码写到这,想要运行,还需要基于appium的配合,才能够运行起来。上述代码及appium的操作,下篇博文将继续分享。

    问题总结

    在博文一开始时,就讲到遇到的一个问题,现在来说下解决方式。

    在使用真机连接,进行元素定位时,出现如下报错:unexpected error while obtaining UI hierarchy

    询问度娘发现,该问题原因是:android 8.0导致的问题,需要更新 uiautomatorviewer 源码才能解决。个人还不会更新源码,所以继续度娘,发现了一个解决办法,如下:

    1.在D盘根目录下创建app.png文本文件
    2.在E盘根目录下创建app.uix文本文件
    3.执行以下adb命名:     
                      adb shell uiautomator dump /sdcard/app.uix
                      adb pull /sdcard/app.uix E:/app.uix
                      adb shell screencap -p /sdcard/app.png
                      adb pull /sdcard/app.png D:/app.png
    4.运行uiautomatorviewer.bat,导入文件
    5.再次连接手机问题得到了解决
    执行adb命令如下所示:

    运行uiautomatorviewer.bat,导入文件,如下所示:

    使用如上步骤,即可实现元素定位了,之前我说过,我不太喜欢用这种方式,是因为,每切换一个页面,则需要重复上述步骤,觉得麻烦,所以就借助模拟器来进行元素定位了,这只是我个人喜好罢了。命令一行一行的执行,很繁琐,不过可以写个bat文件脚本,一键执行即可。

  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/jodie2019/p/12424688.html
Copyright © 2011-2022 走看看