刚开始接触 appium,准备用公司的 android app 写一个简单的例子,遇到一个很奇葩的问题,求大神帮忙。。。。
同一个页面,通过 uiautomatorviewer 获取的页面元素却不一样,appium 的 log source 也只能获取到图一种的页面
图一:
图二:
建议使用 macaca 的 app inspector,这个确实科学,好用
#2 楼 @lingcizhisheng app-inspector 貌似不支持 ios 真机吧?
有时候 UIAutomatorViewer 会把 WebView 当成 native 控件,有时候不会。没有弄明白这里的原理。
可以不要依赖 UIAutomator ,切换 Context 当 Web 测试。
#4 楼 @sanlengjingvv如何不依赖 UIAutomator,不懂,求详解
如果是混合应用,用 UIAutomator 不行的,切换 context 试试,driver.context,把结果 print 出来看看里面的 webview,然后 driver.switch_to.context('(这里输入你前面 print 出来的 webview)'),然后就可以操作 DOM 元素,你可以 print (page_resouce) 打印当前页面的元素
@amber_cheng 什么软件,我试试
差旅随行
#12 楼 @amber_cheng 跳过引导页的时候,我用了休眠确保能定位到登陆页面,就能打印出来页面元素了
#13 楼 @Hoyeung 直接贴代码
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=4.4.2 deviceName=Android Emulator app=${CURDIR}/demoapp/chailvsuixing.apk appPackage=com.travelsky.bluesky appActivity=.UIView automationName=appium unicodeKeyboard=True
sleep 5s
# 引导页
Swipe 600 720 120 720 2000
Swipe 600 720 120 720 2000
Swipe 600 720 120 720 2000
Swipe 600 720 120 720 2000
Swipe 600 720 120 720 2000
sleep 3s
Click Element id=android:id/content
sleep 5s
${a} Get Contexts
log ${a}
Switch To Context ${a}
sleep 3s
Log Source
# 登录页面
comment 输入公司编码
Input Text xpath=//android.widget.EditText[contains(@index,0)] publish
comment 用户名称
Input Text xpath=//android.widget.EditText[contains(@index,1)] amber.cheng@citsgbt.com
comment 用户密码
Input Password xpath=//android.widget.EditText[contains(@index,2)] 123456a
Comment 点击登录按钮
Click Element xpath=//android.widget.Button[contains(@content-desc,'登录')]
sleep 5s
问题已解决,使用 6 楼 Hoyeung 的建议,切换到了 webview 模式