Appium(六)Toast 定位 + Android版本问题的解决以及 Selenium 的安装+屏幕截图

       页面的错误提示 Toast,比如:网络加载问题出现的错误、用户名或者密码输入错误、银行卡密码输入次数提示等错误,这些错误的内容一般都会以浮动的方式显示,而且他们显示的时间非常的有限,可能是几秒钟的时间就会消失掉,不会被点击,无法获取到他们的焦点,但是在 Android 中有一个叫做 Appium Toast 的工具,在 Android 1.6.x 多的时候就已经开始支持识别 Toast 的内容了,但是它是基于 UIAutomator2 的,所以说呢,在我们启动 app 的配置文件中需要增加如下参数即可:

xg_caps['automationName'] = 'uiautomator2'

目录

1、首先要安装 UIAutoMator2的包

2、安装 Selenium 

3、综合案例

4、执行脚本时遇到的问题

5、屏幕截图


1、首先要安装 UIAutoMator2的包

// 在终端输入以下命令
bogon:~ Sirius$ cnpm install appium-uiautomator2-driver

在安装完成后,按照提示的安装路径进行查看,会发现有如下两个文件说明已经安装成功了:

2、安装 Selenium 

方法一:

在 Terminal 中输入如下命令: pip install selenium(Python2中的命令)、pip3 install selenium(Python3中的命令),根据自己安装的环境选择不同的安装命令即可

方法二:以 PyCharm 编辑器为例

选择 PyCharm 菜单—>Preferences—>Project—>Project Interpreter,在右侧的对话框中找到 pip 后,双击,在出现的对话框中进行如下2不操作即可

验证是否安装成功,创建一个 py 文件,输入 from selenium ,如果有提示说明安装成功,如果没有安装成功,可以尝试用第一种方法进行安装

3、综合案例

  • 测试环境
  1. java jdk version:1.8.0
  2. appium version:1.13.0
  3. selenium version:3.11.0
  4. device android version:6.0.1
  5. python version:3.6.2
  6. test app wandoujia version:5.71.21
  • 测试场景

进入到登录界面,只输入用户名和密码,不选中 同意复选框,直接点击登录,获取提示的 Toast 内容 “请先勾选同意用户许可协议和隐私政策说明”

  • 测试脚本

xg_toast.py

 -*- coding:utf-8 -*-
from capability import driver
from selenium.webdriver.support.ui import WebDriverWait

def login():
    // 点击左上角的主菜单导航按钮
    driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click()

    // 点击
    driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click()

    // 点击又上角的设置按钮
    driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click()

    driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear()
    driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').send_keys('[email protected]')
    driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq')

    driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()

    toast_message = '请先勾选同意用户许可协议和隐私政策说明'
    message = '//*[@text=\'{}\']'.format(toast_message)
    // 进入元素显示等待
    toast_content = WebDriverWait(driver, 5).until(lambda x:x.find_element_by_xpath(message))
    print(toast_content.text)

if __name__ == '__main__':
    login()

Tip:如果获取的内容中包含中文,必须在脚本的第一行添加 coding=utf-8 ,要不然会因为编码的问题而导致文字识别失败

4、执行脚本时遇到的问题

selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing 
the command. Original error: UIAutomation2 is only supported since Android 5.0 (Lollipop). You could still use 
other supported backends in order to automate older Android versions.

// 处理命令时发生未知的服务器端错误。原始错误:无法找到带有OS 5.1.1的活动设备或仿真器。UiAutoMe2仅支持Android 5(Lollipop).您仍然可以使用其他支持的后端来自动化旧的Android版本

也就是说,我的夜神模拟器的Android版本太低了,查了很多方法来升级Android的系统版本,都没有搞定,重新下载了模拟器也不行,有的说搞个多开就完事了,但是 Mac 的好像还不支持多开。最后选择了一个 叫做 网易MuMu 的模拟器,安装也很简单,启动也很快,默认端口是:22471

网易MuMu 网盘链接:https://pan.baidu.com/s/1HqrWGjuavzoX64IiSt36Qw 提取码: 1hg8 

5、屏幕截图

       屏幕截图存在的好处:在自动化测试的过程中,有的时候会遇到各种异常情况,为了能够更好的定位,有的时候除了捕捉日志之外,还需要对设备的状态进行截屏,这样更具有说服力,毕竟有图有真相吗

  • 屏幕截图的方法

①、使用 save_screenshot() 可以直接保存当前屏幕的截屏图片到当前脚本所在的位置

driver.save_screenshot('toast.png')

②、使用 get_screenshot_as_file() 可以将截屏后的图片存放到指定的文件路径

driver.get_screenshot_as_file('./toast1.png')

5.1  截屏案例

  • 测试场景

进入到登录界面,只输入用户名和密码,不选中 同意复选框,直接点击登录,获取提示的 Toast 内容 “请先勾选同意用户许可协议和隐私政策说明”,进行截屏

screen.py

from capability import driver

def login():
    // 点击左上角的主菜单导航按钮
    driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click()

    // 点击
    driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click()

    // 点击又上角的设置按钮
    driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click()

    driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear()
    driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').send_keys('[email protected]')
    driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq')
    driver.find_element_by_xpath('//*[@class="android.widget.CheckBox"]').click()
    driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
    
    // 截屏
    driver.save_screenshot('toast.png')
    driver.get_screenshot_as_file('./toast1.png')

if __name__ == '__main__':
    login()
发布了37 篇原创文章 · 获赞 63 · 访问量 9676

猜你喜欢

转载自blog.csdn.net/xiao66guo/article/details/99440964