现在开始 程序员成就python之路
项目计划 本周 11月十日前完成全自动微信阅读测试 难点 一 原声页也html混编定位!重点 二 配置文件读取与po模块执行..三 待完成 安卓原生andriod 自动化测试之APP打包
前言:
我会安卓前端 php后端 js自动化脚本 这几种程序语言天天写 天天用 因此相当熟悉了然而python完全不同概念 首先框架完全同 太烦人了 首先做基础类库 安卓sdk 安卓jdk 难点就在于设置全局变量 要各种细心 其实也很简单 下载好放在d盘 路径复制下来设置全局路径 下载nodejs 一路确定 再定义好全局路径!安装appium!自动化环境配置成功 其中会遇到各种问题。基础的问题百度可解决!这里难点其实就是了解安卓adb方法 cmd命令行。以及报错方案处理!
现在开始纪录工作日记!
一 创建测试页 start. py
本页面功能:1 配置好driver参数 2滑动和点击函数3APP初始页元素定位4启动测试 测试结果 打开指定APP 点击指定元素 滑动指定元素 调试结束 要测试号模拟器 真机 桌面版appium 命令行版appiun huajjin下的正常调试
二 创建配置文件 config.ini
所有的全局变量写在这里 json格式 比如你要找登录的文本内容。都在这里读取
三。创建po模型
模型的意思类似tp5 不同的是我们模型的类要自己创建。模型分为page页 操作页 业务类 page页就是把页面所有UI信息读取并保存下载 操作页就是提取所需要的页面信息要做的操作 业务类就是各种函数封装准备调用 每个页面创建好自己的man函数调用方法进行测试 保证没问题以后再做下一步 每次加函数 都进行测试一次
四 创建多线程 最好thread 方法 调用threadding函数。面对对象实现多线程操作
多线程不是并发执行 也是顺序执行的
五 创建testcase页面 case的意思就是单子 项目。直接调用楼上操作也的方法 打包在一起成为一个项目 比如 登录 注册 case页就是完成一个项目都最终结果
启动appium 服务 控制台显示原来cmd内的调试信息:
调用startAppiumServer.bat 和stopAppiumServer.bat时,可用“start /b”开头或“start”开头,个人更喜欢用“start /b”开头
服务器标志
所有的标志都是可选的,但是有一些标志需要组合在一起才能生效。
标志默认值描述例子
--shellnull进入 REPL 模式
--localizable-strings-diren.lprojIOS only: 定位 .strings所在目录的相对路径--localizable-strings-dir en.lproj
--appnulliOS: 基于模拟器编译的 app 的绝对路径或者设备目标的 bundle_id; Android: apk 文件的绝对路径--app /abs/path/to/my.app
--ipanull(IOS-only) .ipa 文件的绝对路径--ipa /abs/path/to/my.ipa
-U, --udidnull连接物理设备的唯一设备标识符--udid 1adsf-sdfas-asdf-123sdf
-a, --address0.0.0.0监听的 ip 地址--address 0.0.0.0
-p, --port4723监听的端口--port 4723
-ca, --callback-addressnull回调IP地址 (默认: 相同的IP地址)--callback-address 127.0.0.1
-cp, --callback-portnull回调端口号 (默认: 相同的端口号)--callback-port 4723
-bp, --bootstrap-port4724(Android-only) 连接设备的端口号--bootstrap-port 4724
-k, --keep-artifactsfalse弃用,无效。trace信息现在保留tmp目录下,每次运行前会清除该目录中的信息。 也可以参考 –trace-dir 。
-r, --backend-retries3(iOS-only) 遇到 crash 或者 超时,Instrument 重新启动的次数。--backend-retries 3
--session-overridefalse允许 session 被覆盖 (冲突的话)
--full-resetfalse(iOS) 删除整个模拟器目录。 (Android) 通过卸载应用(而不是清除数据)重置应用状态。在 Android 上,session 完成后也会删除应用。
--no-resetfalsesession 之间不重置应用状态 (iOS: 不删除应用的 plist 文件; Android: 在创建一个新的 session 前不删除应用。)
-l, --pre-launchfalse在第一个 session 前,预启动应用 (iOS 需要 –app 参数,Android 需要 –app-pkg 和 –app-activity)
-lt, --launch-timeout90000(iOS-only) 等待 Instruments 启动的时间
-g, --lognull将日志输出到指定文件--log /path/to/appium.log
--log-leveldebug日志级别; 默认 (console[:file]): debug[:debug]--log-level debug
--log-timestampfalse在终端输出里显示时间戳
--local-timezonefalse使用本地时间戳
--log-no-colorsfalse不在终端输出中显示颜色
-G, --webhooknull同时发送日志到 HTTP 监听器--webhook localhost:9876
--native-instruments-libfalse(IOS-only) iOS 内建了一个怪异的不可能避免的延迟。我们在 Appium 里修复了它。如果你想用原来的,你可以使用这个参数。
--app-pkgnull(Android-only) 你要运行的apk的java包。 (例如, com.example.android.myApp)--app-pkg com.example.android.myApp
--app-activitynull(Android-only) 打开应用时,启动的 Activity 的名字(比如, MainActivity)--app-activity MainActivity
--app-wait-packagefalse(Android-only) 你想等待的 Activity 的包名。(比如, com.example.android.myApp)--app-wait-package com.example.android.myApp
--app-wait-activityfalse(Android-only) 你想等待的 Activity 名字(比如, SplashActivity)--app-wait-activity SplashActivity
--android-coveragefalse(Android-only) 完全符合条件的 instrumentation 类。 作为命令 adb shell am instrument -e coverage true -w 的 -w 的参数--android-coverage com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation
--avdnull(Android-only) 要启动的 avd 的名字
--avd-argsnull(Android-only) 添加额外的参数给要启动avd--avd-args -no-snapshot-load
--device-ready-timeout5(Android-only) 等待设备准备好的时间,以秒为单位--device-ready-timeout 5
--safarifalse(IOS-Only) 使用 Safari 应用
--device-namenull待使用的移动设备名字--device-name iPhone Retina (4-inch), Android Emulator
--platform-namenull移动平台的名称: iOS, Android, or FirefoxOS--platform-name iOS
--platform-versionnull移动平台的版本--platform-version 7.1
--automation-namenull自动化工具的名称: Appium or Selendroid--automation-name Appium
--browser-namenull移动浏览器的名称: Safari or Chrome--browser-name Safari
--default-device, -ddfalse(IOS-Simulator-only) 使用instruments自己启动的默认模拟器
--force-iphonefalse(IOS-only) 无论应用要用什么模拟器,强制使用 iPhone 模拟器
--force-ipadfalse(IOS-only) 无论应用要用什么模拟器,强制使用 iPad 模拟器
--languagenulliOS / Android 模拟器的语言--language en
--localenullLocale for the iOS simulator / Android Emulator--locale en_US
--calendar-formatnull(IOS-only) iOS 模拟器的日历格式--calendar-format gregorian
--orientationnull(IOS-only) 初始化请求时,使用 LANDSCAPE (横屏) 或者 PORTRAIT (竖屏)--orientation LANDSCAPE
--tracetemplatenull(IOS-only) 指定 Instruments 使用的 tracetemplate 文件--tracetemplate /Users/me/Automation.tracetemplate
--show-sim-logfalse(IOS-only) 如果设置了, iOS 模拟器的日志会写到终端上来
--show-ios-logfalse(IOS-only) 如果设置了, iOS 系统的日志会写到终端上来
--nodeconfignull指定 JSON 格式的配置文件 ,用来在 selenium grid 里注册 appiumd--nodeconfig /abs/path/to/nodeconfig.json
-ra, --robot-address0.0.0.0robot 的 ip 地址--robot-address 0.0.0.0
-rp, --robot-port-1robot 的端口地址--robot-port 4242
--selendroid-port8080用来和 Selendroid 交互的本地端口--selendroid-port 8080
--chromedriver-port9515ChromeDriver运行的端口--chromedriver-port 9515
--chromedriver-executablenullChromeDriver 可执行文件的完整路径
--use-keystorefalse(Android-only) 设置签名 apk 的 keystore
--keystore-path(Android-only) keystore 的路径
--keystore-passwordandroid(Android-only) keystore 的密码
--key-aliasandroiddebugkey(Android-only) Key 的别名
--key-passwordandroid(Android-only) Key 的密码
--show-configfalse打印 Appium 服务器的配置信息,然后退出
--no-perms-checkfalse跳过Appium对是否可以读/写必要文件的检查
--command-timeout60默认所有会话的接收命令超时时间 (在超时时间内没有接收到新命令,自动关闭会话)。 会被新的超时时间覆盖
--keep-keychainsfalse(iOS) 当 Appium 启动或者关闭的时候,是否保留 keychains (Library/Keychains)
--strict-capsfalse如果所选设备是appium不承认的有效设备,会导致会话失败
--isolate-sim-devicefalseXcode 6存在一个bug,那就是一些平台上如果其他模拟器设备先被删除时某个特定的模拟器只能在没有任何错误的情况下被建立。这个选项导致了Appium不得不删除除了正在使用设备以外其他所有的设备。请注意这是永久性删除,你可以使用simctl或xcode管理被Appium使用的设备类别。
--tmpnull可以被Appium用来管理临时文件的目录(绝对路径),比如存放需要移动的内置iOS应用程序。 默认的变量为 APPIUM_TMP_DIR ,在 *nix/Mac 为 /tmp 在windows上使用环境便令 TEMP 设定的目录。
--trace-dirnull用于保存iOS instruments trace的 appium 目录,是绝对路径, 默认为 /appium-instruments
--intent-actionandroid.intent.action.MAIN(Android-only) 用于启动 activity 的intent action--intent-action android.intent.action.MAIN
--intent-categoryandroid.intent.category.LAUNCHER(Android-only) 用于启动 activity 的intent category--intent-category android.intent.category.APP_CONTACTS
--intent-flags0x10200000(Android-only) 启动 activity 的标志--intent-flags 0x10200000
--intent-argsnull(Android-only) 启动 activity 时附带额外的 intent 参数--intent-args 0x10200000
--suppress-adb-kill-serverfalse(Android-only) 如果被设定,阻止Appium杀掉adb实例。
-------------------------------------------------------------------------------------------------------------------
vscode 安装:
VSCode中设置Python解释器和pylint的波浪线问题
VSCode中设置Python interpreter
为了在vscode中看到package源码,需要设置好vscode中的Python解释器路径,然后就可以点击右键—>转到定义,随意的看到package源码了,这样看package黑箱内部很方便了。
打开设置
文件—》首选项——》设置
搜索python.pythonPath
可以看到现在的解释器是:默认的”python”,然后在右侧的用户设置中改为自己的解释器,覆盖默认的。
这样就可以了,各种函数和关键字就可以找到库中的定义了。
跳转到定义
如果要看某个函数或者对象的定义的话,有三种方法:
在对象上右击选择“查看定义”,会弹出一个窗口,正好包含所查看的对象。
右击选择“转到定义”或者按Ctrl并单击,这样会在当前文件跳到目标文件,看完Ctrl+alt+-可以返回,如果要对比着看的话这样有些不方便。
按Ctrl+Alt并单击,这样会在一个新的窗口打开目标文件,看完关闭即可。
python插件中默认使用pylint的一个工具,专门用来检测python代码的书写是否有错误和是否符合良好的习惯。python官网(https://www.python.org/dev/peps/pep-0008/)专门有版块介绍推荐的python代码习惯,比如类,函数等的命名规则,遵守这些规则可以使自己的代码更加上档次。
然后pylint在面对django框架时表现的有些不足,因为django使用了大量的元编程(metaprograming)思想以及鸭子模型,以至于在程序运行时会修改不少对象的属性和行为(妹的,我也不知道元编程是什么鬼),但是这样给pylint这样的语法检测程序带来了比较大的困难。典型的就是集成了django.db.models.Model的模型层对象在编译时没有objects属性,但是运行时却有,造成我们在编写代码时pylint会报"has no objects attributes"之类的错误,虽然不影响程序运行,但是很影响心情啊。所以有人专门开发了pylint的插件pylint-django,很详细的介绍的文章在这里(https://blog.landscape.io/using-pylint-on-django-projects-with-pylint-django.html),作者好像就是插件的开发者,像热心的程序员致敬哦。使用pip install pylint-django即可安装,命令行里可以通过 pylint --load-plugins pylint_django [other option]的方法来使用,一定要注意是pylint_django,不是pylint-django。
但是,我现在说的是在vscode里面配置使用pylint-django,方法非常简单,在vscode中选择"文件"->"首选项"->"设置"打开vscode的设置文件,然后"python.linting.pylintArgs"处添加"--load-plugins", "pylint_django"即可。如图:
有必须要的话重启下vscode,然后pylint就不会在报错了。
-----------------------------------pip 制定路径----------------------
接上篇“Eclipse启动报错:JVM terminated. Exit code=2”,今天把Python的安装位置也从C盘剪切到了D盘,
然后修改了Path环境变量中对应的盘符:D:\Python27\;D:\Python27\Scripts;
不管是在哪个目录,Python可以执行了,但是执行Pip的时候就出错了!
D:\Python27\Scripts>pip
Fatal error in launcher: Unable to create process using '"C:\Python27\python.exe
" "D:\Python27\Scripts\pip.exe" '
Path环境变量已经改了,它居然还是去找C盘的位置,我就感觉很奇怪了。
尝试使用“python pip.exe install”是可以的,但是又觉得这样用比较麻烦,还是希望把它搞清楚!又不希望重新安装!
在网上搜索“pip从什么位置读取python的安装目录”无果,就搜索错误信息,还真找到了!
有网友在cmd下执行“python -m pip install --upgrade pip”解决了问题,我这却不行。-----这条可行
哦哦,我没有加“-m”参数。
我采用的解决方法比较野蛮野蛮野蛮一点,是使用二进制文件编辑工具修改“pip.exe”,
参考:http://stackoverflow.com/questions/24627525/fatal-error-in-launcher-unable-to-create-process-using-c-program-files-x86
使用HEdit打开,然后搜索“C:\”,找到对应的位置,然后把盘符修改成“D”,保存,再执行"pip"命令就OK了。
“D:\Python27\Scripts”目录下有多个文件都存在这样的情况,顺手都改了吧。
---------------------------------------------------------配置系统变量-----------------------------------------------------------
appium -a 127.0.0.1 -p 4727 -bp 4728 --chromedriver-port 9519 -U xiaomi --session-override
appium -a 127.0.0.1 -p 4723 -bp 5555 --chromedriver-port 9519 -U xiaomi --session-override
npm --registry http://registry.npm.taobao.org install appium@1.14.1 -g
npm --registry https://registry.npm.taobao.org install appium -gn
cnpm install -g appium
npm uninstall -g appium
pip install Appium-Python-Client
CLASSPATH %JAVA_HOME%\jre\lib;%JAVA_HOME%\jre\lib\tools.jar;
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%SYSTEMROOT%
\System32\WindowsPowerShell\v1.0\;D:\python;D:\python\Scripts;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%ANDROID_HOME%\tools;%ANDROID_HOME%
\platform-tools;D:\nodejs\;D:\nodejs\node_modules\npm\bin\;
测试语句:java \ node\ adb\ appium \npm python 以上都有返回值说明配置成功
---------------------------------命令行安装appium可能发生的问题----------------------------------------------
npm ERR! A complete log of this run can be found in
2019-03-15 11:44:39 DerrickTel 阅读数 894更多
分类专栏: node
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cuandeqin2083/article/details/88570339
npm版本的问题,然后更新了npm版本(其实也不是更新,运行完命令,版本号没变,感觉是是完善了一些组件)
全局更新
npm install npm -g
或者用淘宝镜像命令
cnpm install npm -g
npm --registry https://registry.npm.taobao.org install appium -gn
cnpm install -g appium
npm uninstall -g appium
pip install Appium-Python-Client
-------------------------------------------------------------------------------------------------------------
1.安装:输入pip install pyyaml或者pip3 install pyyaml
2.检查是否安装成功:输入python
3.再输入:import yaml
报不是内部文件证明没有安装成功,需要重新安装
没有报错,表明安装成功
----------------------------------------------编辑器-------------------------------------------------------
1.sublime下载与插件管理
1.1 下载
官网地址:https://www.sublimetext.com/3
1.2 安装Package Control管理插件
使用ctrl + ` (感叹后左边的那个键位),输入以下内容
importurllib.request,os,hashlib; h ='7183a2d3e96f11eeadd761d777e62404'+'e330c659d4bb41d3bdf022e94cab3cd0'; pf ='Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen('http://packagecontrol.io/'+ pf.replace('','%20')).read(); dh = hashlib.sha256(by).hexdigest();print('Error validating download (got %s instead of %s), please try manual install'% (dh, h))ifdh != helseopen(os.path.join( ipp, pf),'wb').write(by)
安装好后,在Preferences下出现Package Control
1.3 安装实用插件
这里提供链接:http://www.xuanfengge.com/practical-collection-of-sublime-plug-in.html
1.4 设置编码和字体
打开Preferences - settings,加上
"default_encoding":"UTF-8","font_size": 16.0,"tab_size": 4,
表示使用utf-8编码,大小16px,一个tab 键 是四个空格键
2.python下载与配置
博主用的是python3
官网地址:https://www.python.org/downloads/
2.1下载
2.2 安装与配置python环境
验证 cmd 控制台 输入 python 展示信息 和 版本,并可以编程:
3. sublime整合python运行环境
3.1 配置python3环境
打开 Tools > Build System > New Build System 如下图所示:
输入以下内容:
"encoding":"utf-8", "working_dir":"$file_path", "shell_cmd":"C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\python.exe -u \"$file\"", "file_regex":"^[ ]*File \"(...*?)\", line ([0-9]*)", "selector":"source.python"
如下图所示:
然后 Ctrl + S 直接保存为想要命名的编译名称(如:python352):
然后重启 Sublime text 3 选择 python 352 即可:
测试一下效果:
注:按ctrl +b 是执行操作的命令,切记,切记,切记执行前要先保存文件。(这个和python自带的ide一毛一样,
每次F5执行时都要先保存才行)
3.2 SublimeREPL插件安装
由于Sublime text 3 没有默认提供python的input()的输入窗口,所以当你想要键入一些数据的时候,根本
无进行操作的,所以需要安装一个叫做sublimeREPL 的插件。
打开package control 选项 输入Install Package,回车,在新出现的输入框里输入SublimeREPL 搜索到以后进行安装:
然后来测试一下效果:
建立一个带有input()功能的测试python脚本,然后 tools> SublimeREPL > python > python - run current file ,在新打开的页面输入 19,即打印了相应的判断结果:
然后就会有一个问题,就是每次需要类似操作的时候,均需要 tools > SublimeREPL > python > python - run current file的步骤,十分的麻烦,所以就进行一个快捷键的设置:
3.3 设置快捷键
打开 preferences>key bindings :
输入以下信息后保存即可:
{
"keys":["f5"], "caption":"SublimeREPL: Python - RUN current file", "command":"run_existing_window_command","args": {"id":"repl_python_run", "file":"config/Python/Main.sublime-menu"}
}
至此,快捷键就设置完成了,其实此时的f5 就和python 自带的 ide 的 f5 功能一样了,相当于执行程序了。
执行之前,一定要保存,保存,保存!
3.4 参考
http://blog.csdn.net/vertigozz/article/details/54574006
4.遇到的问题
4.1 python安装路径找不到(可能还需要展示隐藏文件夹 笑.jpg)
5.一点想法
1.本周主要学习了一些python的基础语法,看前面的确实很快,愿能真正坚持下来,解决问题
2.关于百万英雄 答题解决方案,请拿走,不谢
python版本:https://github.com/wuditken/MillionHeroes
java版本:https://github.com/lingfengsan/MillionHero
原创
Sublime下安装Python插件
2016-11-14 14:51:13 just4you 阅读数 3085更多
分类专栏: Python
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/just4you/article/details/53158905
根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.5对应的64位安装程序或32位安装程序。
运行下载的python-xxxxx.exe程序进行安装,安装时要勾选Add Python 3.5 to PATH,省得自己手动配置环境变量。
安装完成,在cmd窗口下运行:python,出现“>>>”提示符,说明安装成功,进入了python交互环境。
D:\>pythonPython3.5.0(v3.5.0:374f501f4567, Sep132015,02:27:37) [MSC v.190064bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formore information.>>>
1
2
3
4
5
在python交互环境下输入exit()或关闭cmd窗口退出交互环境。
下载并安装Sublime。
启动sublime,此时菜单Preferences的子菜单最后一项是:Color Scheme。
在[https://packagecontrol.io/installation]页面右侧的“Manual”第三项中下载PackageControl包Package Control.sublime-package
点击菜单项Prferences->Browse Packages,打开文件夹:…\Sublime Text 3\Packages,此文件夹下有一个User文件夹,浏览上一层,会有一个Installed Packages文件夹,进入此文件夹:..\Sublime Text 3\Installed Packages。
将下载的Package Control.sublime-package文件复制到此文件夹。
重启sublime。此时菜单preferences的子菜单Color Scheme下多出两项:Package Settings和Package Control,说明安装成功。
在sublime下使用:ctrl+shift+p,在出现的窗口中输入:install package,然后稍等片刻(3到10秒不等),会出现可用的插件列表窗口,此时输入:SublimeREPL(不用区分大小写),第一个列出的就是要安装的插件。选择安装。左下角的状态栏会有安装进度提示。
安装完成,在菜单Tools下的子菜单会出现:SublimeREPL。通过Tools->SublimeREPL->Python可看到效果。
通过Tools->SublimeREPL->Python->Python相当于打开一个Python交互环境,效果和cmd下的效果差不多(代码高亮),回车会执行代码。
用sublime打开一个python文件后,可使用Tools->SublimeREPL->Python->Python RUN current file运行python文件。可将此操作设置为快捷键。
点击Preferences->Key Bindings-User,复制如下内容并保存。
[{"keys":["ctrl+f11"],"caption":"SublimeREPL: Python - RUN current file","command":"run_existing_window_command", "args":{"id":"repl_python_run","file":"config/Python/Main.sublime-menu"}}]
1
2
3
4
5
打开python文件后,可使用ctrl+F11执行。
?。。。。。。。。
热门频道
首页
博客
学院
VIP
APP
问答
下载
推荐频道
商城
论坛
活动
招聘
GitChat
ITeye
专题
打开CSDN APP
Copyright © 1999-2019, CSDN.NET, All Rights Reserved
搜索博文/帖子/用户
登录
Appium中常用查找控件的方法 原创
wan_zaiyunduan
2017-04-11 阅读数:3630
关注
曾经由于一些特殊的原因搁置了,有很多想法,并未去实现,准备花点时间把基于Appium的UI自动化项目重写一下,一方面是以前写的过于耦合,也有一些特殊的问题没有解决,如:不同手机有不同的权限弹框、失败重试机制、校验脚本失败是由于应用质量还是脚本本身原因等。学的多不如学的精,意义不外如是也~
这是以前整理的Appium中常用的操作控件的方法,后续会继续补充…
1.通过文本定位
driver.findElementByAndroidUIAutomator("new UiSelector().text(\"反馈天气\")").click();
1
2.通过列表index定位
List<WebElement> listReport = driver.findElementsByClassName("android.widget.TextView");// 获取TextView的所有元素
WebElement targetReport = listReport.get(4);// 获取列表中第四个Textview,即“阴”
targetReport.click();
1
2
3
4
3.通过Xpath定位
driver.findElementByXPath(
"//android.widget.Button[@resource-id=\"com.moji.mjweather:id/btn_weather_feedback_publish\"]").click();
Thread.sleep(2000);
driver.findElementByXPath("//android.widget.TextView[@text=\"使用其他方式登录\"]").click();
1
2
3
4
5
4.输入文字
List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
//textFieldsList.get(0).clear();
textFieldsList.get(0).sendKeys("15527913638");
textFieldsList.get(1).sendKeys("12345678");
// 另一种输入方法,与List效果一致
/*
* driver.findElement(By.id(
* "com.moji.mjweather:id/et_login_input_account")).sendKeys(
* "15527913638"); driver.findElement(By.id(
* "com.moji.mjweather:id/et_login_input_password")).sendKeys("123456");
*/
1
2
3
4
5
6
7
8
9
10
11
12
5.校验文案是否展示
// wait login success
Assert.assertTrue(driver.findElement(By.name("好友动态")).isDisplayed());
1
2
3
6.截屏
snapshot((TakesScreenshot) driver, "时景页面.png");
----------------------------------------------------------------------
最新解决python输出中文乱码的问题
2019-05-14 12:11:43Jack_0601阅读数 461更多
分类专栏: 工具
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43509263/article/details/90203694
当我们在尝试进行中文输出的时候,基本print出来的情况都是乱码,这个时候应该怎么解决?
网上非常多版本的解决方法都是老旧没有更新,大家尝试过后相信都会报这样一个错误:
TypeError:__init__()got an unexpected keyword argument ‘encoding'
1
没错,这个原因就是在python3中,json.dumps()中压根就没有encoding这个参数!
下面是它的API,我们可以看下:
json.dumps(obj,*,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,default=None,sort_keys=False,**kw)
1
2
解决方法:
1- python2 版本:利用json.dumps进行转换
importjsons='哈哈'print(json.dumps(s,encoding='UTF-8',ensure_ascii=False))
1
2
3
2- python3 版本:直接在写入文件的是否加上encoding这个参数
withopen('filename.json','w',encoding="utf-8")asf:f.write(json.dumps(dicts,ensure_ascii=False))
1
2
上面的dicts就是你要写入的东西.
。。。。。。。。。
吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn
登录 注册[Register]
快捷导航
网站新帖搜索
请输入搜索内容
搜索
搜索
吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn»网站›【 软件安全 】›『悬赏问答区』
返回列表
使用adb命令控制手机自动点击屏幕 [复制链接]
电梯直达
跳转到指定楼层 楼主
士宾9527 2018-5-24 16:01
50
吾爱币
效果:控制手机每隔1秒自动点击屏幕某区域 ,查过adb shell input tap xy只能点击1次
最佳答案
genian1991
查看完整内容
程序如下,将以下代码复制到文本文件中,并修改文件后缀名为.bat,双击执行即可。 如有疑问可随时咨询我,有帮助记得设为最佳,感谢! ...
收藏收藏6
分享淘帖
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。
回复 举报
沙发
genian1991 2018-5-24 16:01
本帖最后由 genian1991 于 2018-5-24 21:29 编辑
程序如下,将以下代码复制到文本文件中,并修改文件后缀名为.bat,双击执行即可。
如有疑问可随时咨询我,有帮助记得设为最佳,感谢!
[Bash shell] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
@echo off
set i=1
:CLICK
echo click %i%...
::此处数字500 500表示需要点击的屏幕坐标,可根据需求自行更改
adb shell input tap 500 500
::此处数字5表示延时5秒,可根据需求自行更改
ping 127.0.0.1 -n 5 >nul
set /a i=i+1
goto CLICK
运行效果图如下图:
快照1.png (21.38 KB, 下载次数: 8)
执行效果图
执行效果图
免费评分
参与人数 吾爱币 热心值 收起理由
bester + 1 + 1 我很赞同!
查看全部评分
【吾爱破解论坛总版规】 - [让你充分了解吾爱破解论坛行为规则]
回复 举报
3#
士宾9527 2018-5-24 16:02 <
吾爱破解论坛没有任何官方QQ群,禁止留联系方式,禁止任何商业交易。
大神快来解答啊
如何升级?如何获得积分?积分对应解释说明!
回复 举报
4#
weare 2018-5-24 16:36
《站点帮助文档》有什么问题来这里看看吧,这里有你想知道的内容!
你这个加一个无限循环每隔一秒点击屏幕就可以了。
呼吁大家发布原创作品添加吾爱破解论坛标示!
回复 举报
5#
士宾9527 2018-5-24 16:55 <
weare 发表于 2018-5-24 16:36
你这个加一个无限循环每隔一秒点击屏幕就可以了。
就是不知道怎么加进去 麻烦大佬把改好的命令发出来,多谢。
如何快速判断一个文件是否为病毒!
回复 举报
6#
yueother 2018-12-7 07:16
不错不错,收藏一下
回复 举报
头像被屏蔽
7#
bbvx123 2019-3-23 09:53
提示: 该帖被管理员或版主屏蔽
回复 举报
返回列表
高级模式
BColorImageLinkQuoteCodeSmilies
您需要登录后才可以回帖 登录 | 注册[Register]
发表回复 警告:禁止回复与主题无关内容,违者重罚! 回帖并转播 回帖后跳转到最后一页
免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
Mail To:Service@52PoJie.Cn
RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )
Appium for Android元素定位方法
...
原创 Appium for Android元素定位方法
niedongri 关注2017.12.18阅 5470
Appium定位元素的方法有很多,比如经常用的by_name、by_resource-id、by_classname
下面介绍下通过UI Automator方法来定位元素的方法,而且这些方法定位都比较准。
先假设我们通过UiAutomator定位到的元素部分属性如下:
Index 1
Text xxx
Resource-id android:id/text1
Class android.widget.TextView
Content-desc xxx
一、 通过Text属性定位
直接通过text名称定位:
Driver.find_element_by_android_uiautotmator(‘new UiSelector().text(“xxx”)’)
查找某个字符串包含有xxx的元素
Driver.find_element_by_android_uiautomator(‘new UiSelector().textContains(“xxx”)’)
某个以x打头的元素
Driver.find_element_by_android_uiautomator(‘new UiSelector().textStartWith(“x”)’)
通过Matches方法查找
Driver.find_element_by_android_uiautomator(‘new UiSelector().textMatches(“^xx.*”)’)
二、 通过class属性定位
通过class名称查找:
driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView").text("xxx")')
匹配text是xxx并且classname含有TextView的元素:
driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches(".*TextView$").text("xxx")')
三、 Xpath方法定位
通过同级元素定位同级元素,yyyy为同级元素节点text名称
driver.find_element_by_android_uiautomator('new UiSelector().text("xxx").fromParent(new UiSelector().text("yyyy"))')
通过父级元素定位子元素 ListView为父级节点classname
driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.ListView").childSelector(new UiSelector().text("xxx"))')
四、 resourceId属性定位
通过resourceId定位:
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("android:id/text1")')
通过matches方法定位:
driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".*id/text1$")')
好了,先介绍很多吧,对元素进行操作的一些方法及获取元素的属性值都与web的类似。
著作权归作者所有:来自51CTO博客作者niedongri的原创作品,如需转载,请注明出处,否则将追究法律责任
niedongri
人气45W+ 文章31 粉丝6
关注
评论
评论
点赞5