appium定位并操作app H5页面元素,以及一些报错和解决方案

参考链接

https://testerhome.com/topics/7866

https://sutune.me/2018/04/30/appium-h5/

chromedriver下载地址:https://chromedriver.chromium.org/downloads

测试环境准备

1.PC端安装chrome,手机端安装谷歌浏览器(部分品牌应用商店可能会没有,可以安装应用宝,再到应用宝上安装google浏览器,或者PC端应用宝内下载。不太清楚这个有什么用途,我不按安装也是可以运行的。)

2. 打开webview调试模式

这里以微信为例,访问debugx5.qq.com开启调试模式。

或者在app中配置如下代码(在WebView类中调用静态方法setWebContentsDebuggingEnabled):

  1. if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
    }

3.浏览器输入 chrome://inspect/devices#devices,可以看到当前webview页面,如果获取不到可以刷新下,或者调试模式未打开。

代码准备

  1. desired_caps_a = {\'platformName\': "Android",
  2. \'platFormVersion\': "10",
  3. \'deviceName\': "dd",
  4. \'udid\': "648d4f29",
  5. # \'automationName\': "UiAutomator1",
  6. \'noReset\': True,
  7. \'unicodeKeyboard\': True,
  8. \'resetKeyboard\': True,
  9. \'appPackage\': "com.tencent.mm",
  10. \'appActivity\': "com.tencent.mm.ui.LauncherUI",
  11. \'chromedriverExecutable\': r"C:\Users\v_yddchen\Desktop\chromedriver_win32 77.0\chromedriver.exe",
  12. \'chromeOptions\': {\'androidProcess\': "com.tencent.mm:toolsmp"} # webview的进程名字,不然会报错

 

  1. # 测试获取H5元素
  2. my_logging.debug(device_a.contexts)
  3. device_a.find_element_by_android_uiautomator(\'new UiSelector().text("Cc")\').click()
  4. device_a.find_element_by_android_uiautomator(\'new UiSelector().textContains("警惕")\').click()
  5. WebDriverWait(device_a, 20).until(lambda x: x.find_element_by_android_uiautomator(\'new UiSelector().text("腾讯新闻")\'))
  6. my_logging.debug(device_a.contexts)
  7. device_a.switch_to.context("WEBVIEW_com.tencent.mm:toolsmp")
  8. time.sleep(3)
  9. my_logging.debug(device_a.current_context)

 

错误

运行上述代码报错了

unknown error: Failed to get PID for the following process: com.tencent.mm

 

 

解决方法:

1.有说是appiumd的chromedriver版本不对,虽然不太认同,但是我尝试了一下

设备:oppo reno android 9 webdriver 70.0.3538.110

PC端chrome版本81.0.4044.117   手机端chrome同样版本 81.0.4044.117  

appium webview的版本78.0.3904.62

 …\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win的路径下,更换chromedriver的版本,或者初始化时

chromedriverExecutable指定chromedriver的路径
更换chromedriver版本 81、78、70都是一样的报错(有点怀疑源码有啥问题,github上搜到了一些蛛丝马迹,等我再翻翻)。

2.更换了一台设备 oppo findx2 Android 10  webview 77.0.3865.92

以上代码运行成功。

奇怪的是,不同手机输出的contexts是不同的。

oppo reno android 9 webdriver 70.0.3538.110

 

  oppo findx2 Android 10  webview 77.0.3865.92

 

 3.确定appium的chromedriver版本的决定性因素

 oppo findx2 Android 10  webview 77.0.3865.92

 

 

更换appium chromedriver的版本为73,低于系统webdriver和app的webview版本,运行提示出错

 

 如果chromedriver的版本为77,运行成功。

设置为81或者78,运行失败。明确报错chrome version问题是很好解决的。

 

版权声明:本文为Cc905原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Cc905/p/13094823.html