热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Appium+python自动化(十三)输入中文一次填坑记(超详解)

简介无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的。别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹。因此在做app自动化道路上也不会是一帆风顺的,你会踩


简介


无论你在哪里,在做什么都会遇到很多坑,这些坑有些事别人挖的,有些是自己挖的。别人挖的叫坑人,自己挖的叫自杀,儿子挖的叫坑爹。因此在做app自动化道路上也不会是一帆风顺的,你会踩很多坑,这些坑和你就是你死我活的节奏,不是坑把你埋了,就是你把坑填了。由于咱们都是黄皮肤的中国人用的大部分都是中文的app,而人家老外都是白皮肤蓝眼睛,用的是英文的APP,人家这个问题可以忽略。我们却不可以的,必须面对的。所以首先宏哥要带小伙伴们解决中文输入的问题!


你能走多远,取决于你填坑能力有多强


微博上看到一张图:



01


在你的计划中,未来目标是清晰可见的,中间一片坦途,只需要稍微用点力,就可以顺利达成。


但实际上呢?


风雨,陡壁,深渊……一路艰难险阻,到处都是坑,最关键是,目之所及全是困难,连目标的影子都看不见!


可以说非常形象了!我们的生活不就是这样吗?


成长的路上,总是充满了各种“坑”,而你能走多远,取决于你“填坑”的能力有多强。


02


“为什么你总是下班这么晚?”


“因为要改的Bug太多了啊。”


“那为什么跟你同组的其他同事很早就下班了?就你一个人总是走不了?”


“没办法啊,太复杂的Bug他们改不了,只能我去解决,不然为什么我月薪2万,他们只有1万?”


“……好吧。”


没错,工作中就是这样。


遇到问题,能解决问题的那个人,永远是最被需要的人,而因为被需要,不可或缺,所以才能拿到高薪,获得更好的个人发展。


改不了的Bug,搞不定的客户,谈不下来的项目……我们习惯性求助于我们的上级领导,而这似乎也解释了,为什么他是上级领导?因为他能解决我们解决不了的问题。


在职场,你的核心竞争力,在于你“填坑”的能力,是否能填别人填不了的坑。


好了,故事就讲到这里吧。言归正传,本篇就由宏哥把前边留有悬念的中文输入问题的坑,带着小伙伴们一起把这个坑填平它,KO它。


宏哥思路:宏哥将会通过屏蔽软键盘,绕过手机的软键盘方法,解决中文输入的问题。


1、定位搜索


1、打开淘宝点搜索按钮,进入到搜索页面



2、然后定位到搜索框后用sendkeys方法输入“hongge”,这里定位元素用第四篇讲的uiautomatorviewer工具就可以了



3、实例代码



4、运行后夜神模拟器、appium、代码的运行过程如下(拼音或者英文),请小伙伴们和宏哥一起仔细看是不是搜索框输入了:hongge 拼音



5、参考代码



1 # coding=utf-8
2 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
3
4 # 2.注释:包括记录创建时间,创建人,项目名称。
5 '''
6 Created on 2019-7-04
7 @author: 北京-宏哥 QQ交流群:707699217
8 Project:学习和使用appium自动化测试-输入中文 - 一次填坑记
9 '''
10 # 3.导入模块
11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android' #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0' #android系统的版本号
16 desired_caps['deviceName'] = '127.0.0.1:62001' #手机设备名称,通过adb devices 查看
17 desired_caps['appPackage'] = 'com.taobao.taobao' #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome' #apk的launcherActivity
19 #desired_caps['unicodeKeyboard'] = True #使用unicodeKeyboard的编码方式来发送字符串
20 #desired_caps['resetKeyboard'] = True #将键盘给隐藏起来
21 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
22 # 休眠五秒等待页面加载完成
23 time.sleep(5)
24 driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
25 time.sleep(3)
26 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click()
27
28 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"hongge")


2、运行脚本


1、首先要确认手机上的输入法是用的什么输入法,如果默认是中文的输入法,启动后会出现下面情况,无法输入成功



2、于是可以先把手机上的输入法改成英文的状态,这样就可以输入英文字符串了。那么问题来了,如果想输入中文的字符串呢?如何解决。。。


3、屏蔽软键盘


1、通过前面的操作,大概可以知道,在APP里面输入字符串是调用的软键盘输入的,有没办法像selenium做web自动化时候一样,直接sendkeys绕过键盘输入呢?


2、于是可以想办法屏蔽软键盘,只需在desired_caps{}设置里面加两个参数( 注意了,注意力,注意力,能不能填坑就看这里啊!!! ),如果直接跟随宏哥的小伙伴们直接把注释去掉了,就可以。



3、unicodeKeyboard是使用unicode编码方式发送字符串


4、resetKeyboard是将键盘隐藏起来


4、输入中文字符


1、将上面代码改成输入中文u“北京-宏哥”,然后运行脚本,在手机上查看结果。(python2中文前面要加个u,python3的可以忽略)





2、运行后夜神模拟器、appium、代码的运行过程如下:请小伙伴们和宏哥一起仔细看是不是搜索框输入了:北京-宏哥  中文汉字


5、参考代码



# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-7-04
@author: 北京-宏哥 QQ交流群:707699217
Project:学习和使用appium自动化测试-输入中文 - 一次填坑记
'''
# 3.导入模块
from appium import webdriver
import time
desired_caps = {}
desired_caps['platformName'] = 'Android' #android的apk还是IOS的ipa
desired_caps['platformVersion'] = '8.0' #android系统的版本号
desired_caps['deviceName'] = '127.0.0.1:62001' #手机设备名称,通过adb devices 查看
desired_caps['appPackage'] = 'com.taobao.taobao' #apk的包名
desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome' #apk的launcherActivity
desired_caps['unicodeKeyboard'] = True #使用unicodeKeyboard的编码方式来发送字符串
desired_caps['resetKeyboard'] = True #将键盘给隐藏起来
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
# 休眠五秒等待页面加载完成
time.sleep(5)
driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
time.sleep(3)
driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click()
driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"北京-宏哥")

6、小结



1、如果在输入中文的时候,手机遇到显示中文字符为乱码时:




2、解决办法:前面加上“#-* -coding:gb18030-* -” 如下图所示:



3、还原设置


(1)当运行上面的脚本后,发现手动去输入时候,无法调出软键盘了,如何恢复呢?


(2)打开手机设置,找到输入法设置选项,会发现默认的输入法被改成appium的输入法了。所以只需把这里的设置,恢复成原来输入法就OK拉。



在实现目标的路上,遇到坑很正常,比临坑痛哭更重要的是,学会把坑填好,继续走下去。最后祝各位小伙伴们填坑顺利,人人都是填坑小能手!!!


您的肯定就是我进步的动力。 支持宏哥的朋友们和宏哥的宏粉记得点波  推荐   哦!!!


个人公众号



微信群





推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
author-avatar
a5365258784
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有