• appium ios webview


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 weixin_41987381 2024-04-11 17:10 采纳率: 0% 浏览 0 首页/ 移动开发 / appium ios webview ios appium ios 自动化时,safari ios_debug_proxy 设置正确,单独启动appium 可调式webview 页面,但是通过程序启动appium,打开H5页面后,context只有native_app,capbility 如下 Appium v2.4.1 creating new XCUITestDriver (v7.1.2) sessionChecking BaseDriver versions for Appium and XCUITestDriver Appium’s BaseDriver version is 9.5.2 XCUITestDriver’s BaseDriver version is 9.5.2 Creating session with W3C capabilities: { “alwaysMatch”: { “platformName”: “IOS”, “appium:deviceName”: “iPhone”, “appium:startIWDP”: true, “appium:automationName”: “XCUITest”, “appium:autoGrantPermissions”: true, “appium:noReset”: false, “appium:platformVersion”: “14.6”, “appium:waitForQuiescence”: false, “appium:instrumentApp”: true, “appium:bundleId”: “XXX”, “appium:udid”: “00008020-001E18A13AC1402E”, “appium:showXcodeLog”: true, “appium:cssSelectorsEnabled”: true, “appium:userNewWDA”: false, “appium:useMobileDeviceTime”: true, “appium:usePrebuiltWDA”: true, “appium:newCommandTimeOut”: 600000, “appium:showChromedriverLog”: true, “appium:chromedriverExecutable”: “/Users/ceshiguanlichu/Downloads/tailifeui-ios/datas/content/chromedriver.exe”, “appium:nativeWebTap”: true, “appium:nativeEvents”: true }, 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-11 17:10
      关注

      引自免费微信小程序:皆我百晓生

      针对您的问题,看起来您已经设置了正确的配置来调试iOS中的WebView。然而,当通过程序启动Appium时,可能由于某些原因导致无法识别到Webview上下文。为了帮您解决这个问题,我将提供几个可能的解决方案步骤:

      步骤1:确认设备连接

      确保您的设备已通过USB连接到电脑,并且在appium-doctor检查中没有报错。

      步骤2:更新Appium版本

      尝试更新Appium到最新版本(目前是Appium 1.22.2),因为旧版本可能存在一些bug。您可以参考官方文档进行升级。

      步骤3:检查代理设置

      确保Safari iOS Debug Proxy设置正确。如果您使用的是macOS,可以按照以下步骤操作:

      1. 打开Safari > 偏好设置 > 高级 > 显示开发菜单。
      2. 在开发菜单中选择“关于此Mac”,记下您的电脑名称。
      3. 连接iPhone到电脑,打开终端并运行以下命令:
        security cmsignature -D -i /Applications/Safari.app
        
        然后输入电脑密码。
      4. 在iPhone上,进入设置 > 发现 > Web Inspector,启用Web Inspector,并添加您的电脑名称。

      步骤4:修改 capability

      根据您的需求,尝试去掉不必要的capability,例如 appium:cssSelectorsEnabled, appium:showXcodeLog, appium:showChromedriverLog, 和 appium:chromedriverExecutable,这些选项可能与Webview无关。同时,确保您提供了正确的bundleId

      这里是一个简化后的 capability 示例:

      {
          "platformName": "iOS",
          "deviceName": "iPhone",
          "startIWDP": true,
          "automationName": "XCUITest",
          "autoGrantPermissions": true,
          "noReset": false,
          "platformVersion": "14.6",
          "waitForQuiescence": false,
          "instrumentApp": true,
          "bundleId": "XXX",
          "udid": "00008020-001E18A13AC1402E",
          "nativeWebTap": true,
          "nativeEvents": true
      }
      

      步骤5:检查H5页面结构

      确保H5页面上有可被自动化测试的元素。比如,有ID、XPath或CSS Selectors等属性的元素。

      步骤6:切换上下文

      在找到H5页面元素之前,您可能需要手动切换到Webview上下文。可以使用以下Python代码片段实现:

      from appium import webdriver
      
      # 创建一个新的WebDriver实例
      driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities)
      
      # 获取当前可用的上下文列表
      contexts = driver.contexts
      
      # 找到Webview的上下文名,通常为"WEBVIEW_XXX"
      webview_context = [context for context in contexts if 'WEBVIEW' in context][0]
      
      # 切换到Webview上下文
      driver.context = webview_context
      
      # 现在您可以尝试查找并操作H5页面上的元素了
      element = driver.find_element_by_xpath('//your/xpath')
      

      如果以上步骤都无法解决问题,建议您检查日志输出,看看是否有任何错误消息或异常。此外,可以考虑使用其他工具,如Selendroid或Espresso,或者查阅Appium社区论坛,看是否有人遇到类似的问题并找到了解决方案。

      祝您好运,如果有更多问题或需要进一步的帮助,请随时告诉我。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-04-11 17:10
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题分析: 根据提供的信息,可知单独启动 appium 能成功调式 webview 页面,但是通过程序启动 appium 后,打开 H5 页面后,context 只有 native_app 和 capbility,没有 webview;同时,capability 中设置了 "appium:startIWDP": true,表示启用了 ios_webkit_debug_proxy。 可能原因:
      1. ios_webkit_debug_proxy 没有正确配置。
      2. appium 启动的过程中没有正确检测到设备中是否有 webview。 解决方案:
      3. 确认 ios_webkit_debug_proxy 配置是否正确,可以参考 appium 官方文档中的设置方法进行调整:https://appium.io/docs/en/drivers/ios-xcuitest-real-devices/#ios-webkit-debug-proxy-setup。
      4. 确认 appium 配置是否正确,需要注意以下几点:
      5. 启用 H5 自动化需要设置 "appium:automationName": "xcuitest"。
      6. 设置 "appium:platformName": "ios"。
      7. 设置 "appium:startIWDP": true。
      8. 确认设备中是否有可用的 webviews,可以通过以下命令进行检查:
      # 获取设备中的 webview 列表
      xcrun simctl list webviews
      # 获取当前设备中的 webview 列表
      xcrun simctl webkit list
      
      1. 如果以上方法不起作用,可以尝试使用 appium 提供的 Capability:“appium:nativeWebTap”: true 和 “appium:nativeEvents”: true,这两个 Capability 可以帮助定位和操作 webviews。 示例代码:
      desired_caps = {
          "platformName": "ios",
          "platformVersion": "14.6",
          "deviceName": "iPhone",
          "appium:automationName": "xcuitest",
          "appium:startIWDP": True,
          "appium:nativeWebTap": True,
          "appium:nativeEvents": True,
          "appium:noReset": False,
          "appium:newCommandTimeout": 600,
          "appium:bundleId": "com.xxx.xxx",
          "udid": "xxxxxxx"
      }
      

      展开全部

      评论
    • GISer Liu 2024-04-11 18:39
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      根据你提供的问题描述,可以看出在通过程序启动 Appium 后,打开 H5 页面后,只能获取到 native_app
      context,而无法获取到 webview 的 context。这种情况可能是由于一些配置或环境设置的问题导致的。以下是我给出的解决思路和解决方案:

      问题分析:

      1. 环境配置检查: 首先需要确认环境配置是否正确,包括 Appium、iOS 系统、Safari、Xcode 等各项版本兼容性。
      2. 设备连接检查: 确保设备连接正常,并且设备上的 Safari Remote Debugging 已经启用。
      3. Appium 配置检查: 检查 Appium 的配置是否正确,尤其是关于 Webview 自动化的配置项。
      4. Capabilities 检查: 检查传递给 Appium 的 Capabilities 是否正确,特别关注与 webview 相关的配置项。
      5. 可能的问题源码分析: 检查启动 Appium 的源码,确认是否有遗漏或错误的配置导致无法获取到 webview 的 context。

        解决思路:

      6. 环境配置调试: 确认各项配置是否准确,可尝试手动启动 Appium 并连接设备进行调试,观察是否能够正常获取到 webview 的 context。
      7. Capabilities 调整: 尝试调整传递给 Appium 的 Capabilities,特别是与 webview 相关的配置项,例如 autoWebviewwebkitDebugProxyPort 等,以确保正确的开启了 webview 自动化功能。
      8. 源码调试: 如果以上方法无法解决问题,可以通过调试 Appium 源码来排查问题,查看是否有相关的配置项未正确设置或者是否有 bug 导致无法获取到 webview 的 context。

        解决方案:

      9. 检查环境配置: 确保 Appium、iOS 系统、Safari 及相关工具的版本兼容,并且设备连接正常。
      10. 调整 Capabilities: 根据需要,调整传递给 Appium 的 Capabilities,确保正确配置了 webview 相关的参数。
      11. 调试源码: 如有必要,通过调试 Appium 源码来排查问题,确保所有配置项都正确设置且没有 bug 导致无法获取到 webview 的 context。
        如果你需要进一步的帮助或者有其他问题,请随时告诉我。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 07:40
      关注

      上午好☀️☀️☀️️
      本答案参考ChatGPT-3.5

      问题描述:

      appium ios 自动化时,safari ios_debug_proxy 设置正确,单独启动appium 可调式webview 页面,但是通过程序启动appium,打开H5页面后,context只有native_app,capbility 如下

      Appium v2.4.1 creating new XCUITestDriver (v7.1.2) session Checking BaseDriver versions for Appium and XCUITestDriver Appium’s BaseDriver version is 9.5.2 XCUITestDriver’s BaseDriver version is 9.5.2 Creating session with W3C capabilities:

      { “alwaysMatch”: { “platformName”: “IOS”, “appium:deviceName”: “iPhone”, “appium:startIWDP”: true, “appium:automationName”: “XCUITest”, “appium:autoGrantPermissions”: true, “appium:noReset”: false, “appium:platformVersion”: “14.6”, “appium:waitForQuiescence”: false, “appium:instrumentApp”: true, “appium:bundleId”: “XXX”, “appium:udid”: “00008020-001E18A13AC1402E”, “appium:showXcodeLog”: true, “appium:cssSelectorsEnabled”: true, “appium:userNewWDA”: false, “appium:useMobileDeviceTime”: true, “appium:usePrebuiltWDA”: true, “appium:newCommandTimeOut”: 600000, “appium:showChromedriverLog”: true, “appium:chromedriverExecutable”: “/Users/ceshiguanlichu/Downloads/tailifeui-ios/datas/content/chromedriver.exe”, “appium:nativeWebTap”: true, “appium:nativeEvents”: true },

      原因分析:

      我们需要在设置capability里添加webview的context,可是查看上述capability,未添加webview的context,因此脚本无法定位webview上的元素。

      解决方案:

      • 在capability中添加autoWebview和autoWebviewTimeout选项,配置值为true和0

      { “alwaysMatch”: { “platformName”: “IOS”, “appium:deviceName”: “iPhone”, “appium:startIWDP”: true,”appium:automationName”: “XCUITest”, “appium:autoGrantPermissions”: true, “appium:noReset”: false, “appium:platformVersion”: “14.6”, “appium:waitForQuiescence”: false, “appium:instrumentApp”: true,”appium:bundleId”: “XXX”, “appium:udid”: “00008020-001E18A13AC1402E”, “appium:showXcodeLog”: true,”appium:cssSelectorsEnabled”: true, “appium:userNewWDA”: false, “appium:useMobileDeviceTime”: true, “appium:usePrebuiltWDA”: true,”appium:newCommandTimeOut”: 600000, “appium:showChromedriverLog”: true, “appium:chromedriverExecutable”: “/Users/ceshiguanlichu/Downloads/tailifeui-ios/datas/content/chromedriver.exe”, “appium:nativeWebTap”: true, “appium:nativeEvents”: true, “appium:autoWebview”: true, “appium:autoWebviewTimeout”: 0 } }

      • 在调用driver前,添加如下代码:

      driver.start_activity(app_package: "com.package.name", app_activity: ".MyActivityName")

      这里的app_package和app_activity是你app的包名和首页的activity名称,通过这行代码可以使appium控制app打开一个WebView,即使使用safari app也没有问题。

      • 运行appium于局域网后,手机wifi设置代理为本机IP地址和Appium设置的端口号,然后在Safari浏览器上打开一个网址可以看到链接网址已经被Appium代理截获并输出到了控制台中,这说明已经成功实现了Appium调试Safari页面的功能。

      代码示例:

      from appium import webdriver

      capabilities = {

      "platformName": "iOS",

      "deviceName": "iPad Pro (9.7-inch)",

      "platformVersion": "12.0",

      "app": "com.example.apple-samplecode.UICatalog",

      "noReset": "true",

      "xcodeOrgId": "4321",

      "xcodeSigningId": "iPhone Developer",

      "autoWebview": True,

      "autoWebviewTimeout": 2000}

      driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', capabilities)

      driver.start_activity(app_package="com.example.apple-samplecode.UICatalog", app_activity=".HomeScreenViewController")

      driver.switch_to.context('WEBVIEW_com.example.apple-samplecode.UICatalog')

      driver.find_element_by_partial_link_text('Switch')

      driver.switch_to.context('NATIVE_APP')

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Homomorphic Evaluation of the AES Circuit:解读
    HTTPS加密对中小微客户的价值?
    mysql Varchar字符存储时报错
    C# Winform编程(3)对话框
    动态样式绑定--style 和 class
    蓝桥等考Python组别十级008
    今年快30岁的我,还是选择了裸辞···
    2022美团网络安全高校挑战赛(初赛)babyjava(XPath注入)
    基于Python Django的公务员考试信息管理系统
    数据可视化基础与应用-01-课程目标与职位分析
  • 原文地址:https://ask.csdn.net/questions/8086969