Appium appium 自动化测试时如何测试拍照功能

a13991 · 2016年04月26日 · 最后由 小王子的玫瑰花 回复于 2017年06月20日 · 3934 次阅读

appium 测试的时候,有个上传图片功能,一个是选择相册里的图片,一个是拍照,我用 driver.sendKeyEvent(27),这个方法后,相机的那个拍照功能实现了,但是到图片保存进,没办法进行了,请问有什么好办法吗

共收到 20 条回复 时间 点赞

老实说,没看懂问题

“但是到图片保存进,没办法进行了” 怎么个进行不了呢???

appium 支持跨 app 啊. 直接按照空间定位去选择就可以了. 不过这样不通用.
最好还是在 android 上开发一个独立的 app 来截获拍照请求并返回对应的图片. 省掉这个过程.

是保存后无法返回到自己的应用还是怎么回事?

我是通过 adb shell input tap 操作相机

a13991 #15 · 2016年04月27日 Author

#4 楼 @suifeng 是这样的,页面中有两个按键,一个是拍照,一个是本地图片,点击拍照后,进入相机,然后点击拍照,拍照后不是有个保存按键吗,再用 appium 自动化测试 时候,我可以用 driver.sendKeyEvent(27)进行拍照,可是那个保存按键我怎么也不能定位,包名不同,找不到这个按钮,没办法再往下进行测试了

点绝对坐标可以解决 至少不至于卡在这里吧,还有一个办法是查找一个可识别的控件然后在此基础上平移(x,y) 坐标点

#6 楼 @a13991 appium 支持跨应用,应该是可以定位到保存按钮的,我也是通过直接定位系统相机的元素来完成的

—— 来自 TesterHome 官方 安卓客户端

是否有好的解决方案?我遇到这个问题了

如果是研究的话,可以考虑 adb 例如:“adb shell am start -n com.android.camera/.Camera
”, 如果是测试的话, 手工测一下就可以了,要考虑 UI 自动化适合的场景及各种成本。

知道怎么解决了,到论坛里找到了答案~driver.wait_activity("com.test.camera",2)

def test_gestureUnlock(self):
#time.sleep(5)
el1 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[10]")
print el1
time.sleep(2)
el2 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[13]")
print el2
time.sleep(2)
el3 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[16]")
print el3
time.sleep(2)
el4 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[17]")
print el4
time.sleep(2)
Gesture = TouchAction().press(el1).move_to(el2).move_to(el3).move_to(el4).release()
print Gesture
time.sleep(2)
Gesture.perform()

请问 手势密码这一段有什么问题啊 一直提示如下错误:

File "/Library/Python/2.7/site-packages/appium/webdriver/common/touch_action.py", line 94, in perform
self._driver.execute(Command.TOUCH_ACTION, params)
AttributeError: 'NoneType' object has no attribute 'execute'

你好,我也遇到和你一样的问题,麻烦能告诉我怎么解决吗?

#11 楼 @lose 你好,我想问一下,我 driver 这个方法 wait_activity,找不到,怎么回事?还有一个问题,从本地文件直接上传图片求你如何实现

我也是使用 7 楼的方法暂时先解决了,虽然是下下策,但实在不想卡在这个步骤!往后应该能找到更好的方法。

我也碰到了这个问题,因为测试的 app 调用系统相机拍照功能,自动化的时候考虑多款手机跑的时候脚本正常运行:
driver.sendKeyEvent(27) 先拍照;
driver.sendKeyEvent(66) 照片保存按钮界面,使用 66 系统回车键,这里可能一次不生效,脚本判断一下

感觉这种功能手工就好,花费代码上得不偿失。

魏娥 回复


但是我这个跑完就只是定位在拍照按钮上,并没有执行拍照这个动作,求问如何解决啊?

能不能把方法写详细点呢,不知道怎么解决,谢谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册