具体是没有弹窗选择图片,还是选择图片后没有反应?
能否打开这个浏览器的调试器看看具体有没有图片上传?
#3 楼 @tcat 你看看这里:排版说明
发帖的界面里就有这个说明的。
部分觉得翻译不准的内容可以附上原来的单词或短语,但不能是整句话或者直接把整段原文放在中文前面。
如果是译文,麻烦附上原文地址,并注明这是译文。可参考 Android UI Automated Testing(译文)
关于快慢的问题,我觉得只要是做黑盒 UI 都快不到哪里去。因为即使你操作很快,你还得等网络、等控件渲染、等界面切换动画。。。最终速度不会比你手工快多少(selenium 在浏览器中运行很快,但你还是要等待浏览器跳转页面的时间)。
而且手机 dump 确实速度比 pc 慢不少。你可以拿个 genymotion 来 dump 一下,会发现比真机快不少。
真的要快,单测或者从 app 内部进行测试才是最快的。
赞!思路很好,排版也不错!
感言可以写出来啊,做了一年,写了 800 多个用例,遇到各种坑,肯定感言不少吧。
有个问题想请教下,你们 800 多个用例执行速度怎样?UIAutomator 速度比较慢(主要是 dump 元素和 输入文字 比较慢),实践中有没有什么好办法提速?
赞!格式很不错,内容也很详细!
另外,想请教一下接口测试用 BDD 来写的话编写用例的效率如何?
因为接口的 API 数量一般较多,所以用例数量不少,想了解下用 BDD 写的话编写速度怎样。
这个文章好正点!谢谢分享。
#7 楼 @eurekasaber 那不清楚了。也许因为它用的不是标准控件,所以会有问题。
你也可以试试先切换回默认输入法,输完验证码再切换到 unicode 输入法。
感谢分享,这是个很不错的思路,大部分体力活用自动生成来做。
不知道你说的 “繁复” 具体是指什么?就这么看的话没觉得哪里明显繁复啊。
PS:麻烦添加头像,最后的 excel 数据 那里表格的 markdown 用错了,具体怎么用可以参考右下角排版说明。
#4 楼 @kufire 你的 xml 里面有一些元素带有 NAF="true"
,而且也没找到看起来是地图里面的元素的节点,所以他们应该是在 NAF="true"
的节点里面,抓取不出来。
如果你确实要点,只能用坐标了。
关于 NAF 请看:
http://stackoverflow.com/questions/25435878/uiautomatorviewer-what-does-naf-stand-for
请添加头像。
log 使用代码块:
代码块
你要先搞清楚地图是用 webview 还是别的东西,然后直接去看 page_source 里面的内容。
uiautomatorviewer 的点击控件位置直接选中控件节点这个功能不是万能的。
之前也遇到过这个问题,js 注入也解决不了(javascript 无法修改 type 为 file 的 input 的 value 属性),最后看了下 robot framework 的 Selenium2Library 里面的源码,发现直接 sendKeys 就好了。。。
对的,>=4.3 才行,4.2 不行。
具体情况可以参考 UIAutomator 在 API level = 17 (4.2) 上的问题
写的很好。分享其实不仅仅是帮助别人,同时也是提升自己。
写学习笔记时可能学到啥就写啥,没有把它们连成线,而且因为只是自己看,也不会太 care 写得好不好。
但分享时就需要提炼精华,把整个学习的过程连成线,并且分层描述,方便别人阅读。其实这个时候也是总结自己的学习过程的时候,总结过后记忆会更牢固,而且也更有层次,即使以后自己要翻查也方便得多。
#5 楼 @jennyhui 其实也不仅仅是 “关键字驱动的框架” ,主要是想让被 “关键字驱动”,“BDD” 这类名词搞得有点混乱的同学搞清楚这些东西实际上不是一个完整的测试框架的全部。
关键字驱动的话其实最简单的做法就是:做个表格到代码的转换器。
表格:
action | params |
---|---|
openBrowser | browserName="Chrome" |
转换后代码:
class TestCase(ActionBase, unittest.TestCase):
# a test case
def open_browser(self):
# step of test case
self.action_call("openBrowser", {"browserName":"Chrome"})
然后这个 action_call 的实现里调用对应的 action 方法来执行实际动作:
class ActionBase:
...
def action_call(action_name, params):
# get action function in this class
action_fun = getattr(self, action_name)
# execute action
action_fun(**kwargs)
...
def openBrowser(browserName=None):
if browserName == 'Chrome':
self.driver = webdriver.Chrome()
...
这样核心层使用 unittest ,工具层使用 selenium ,适配层用关键字驱动。
感谢分享,一直都想玩 monkeyrunner ,但一直都没时间去玩。。。
不过排版能否调整一下?不知道你用的是什么 markdown 工具,现在看到的每一行前面都有个无序列表的符号,反而真正的要点变得不突出了。
文章的要点最好先用大标题,然后小的列表再采用列表格式。
另外, markdown 对段落前后是否是空行、符号前后是否为空格比较敏感,所以最好养成分段的时候段落之间空一行的习惯。
详细的分享是好的,但是排版不专业的话可能会有一部分人读起来不爽。
#2 楼 @tobecrazy 是的。如果从层级上 PageFactory 属于适配层的东西。但由于它应用场景有限(主要用于 UI 的自动化,非 UI 自动化不一定有 page 这个概念),所以不是十分流行。
#3 楼 @eurekasaber 你直接发 keyEvent 试试?
你的文件名不要和模块名重名行不。。。
你的 Traceback 已经明显告诉你在第一个 import 的时候执行了你的 theme 语句,所以你的 import 明显有问题。
不知道 import 的具体工作过程和正确用法的话,可以看看 5. The import system 或者 PEP 0328