Appium - 使用 Chrome 将文件上传到网络 - ERR_ACCESS_DENIED

Roh*_*ule 7 selenium android google-chrome adb appium

我正在尝试使用 Appium 通过 Chrome将文件上传到https://the-internet.herokuapp.com/upload。但它总是导致ERR_ACCESS_DENIED错误。

该文件位于Download我设备的文件夹中。

参考下图:

在此处输入图片说明

我也用不同的组合尝试了以下功能,但没有帮助:noReset, autoGrantPermissions, fastReset.

我的脚本


from appium import webdriver
import time

def execute_script():
  driver = webdriver.Remote(
      command_executor='http://0.0.0.0:4723/wd/hub',
      desired_capabilities={
          "platform": "android",
          "platformName": "android",
          "platformVersion": "10",
          "deviceName": "<xxxx>",
          "udid": "<xxxx>",
          "browserName": "chrome",
          "automationName": "UIAutomator2",
          "chromeOptions": {
              "w3c": False
          },
          # "autoGrantPermissions": True,
          # "noReset": True,
          # "fastReset": True,
          # "fullReset": False
      }
  )

  driver.get('https://the-internet.herokuapp.com/upload')

  up = driver.find_element_by_id("file-upload")
  up.send_keys("/sdcard/Download/file.pdf")
  driver.find_element_by_id("file-submit").click()

  driver.quit()

driver = execute_script()

Run Code Online (Sandbox Code Playgroud)

脚本执行良好,直到这send_keys一步。但是一旦file-submit执行点击,就会导致上述错误。我也在https://fileconvoy.com/上尝试过,但结果是同样的错误。

版本详情:

  • Appium 版本:(1.17.0尝试版本从1.10.x1.20.x
  • 设备:三星 Galaxy S9,Android 10
  • Chromedriver:90.0.4430.24(也试过 Chrome 81,同样的错误)。

我尝试过的一切:

  • 在启动 appium 之前通过以下命令明确授予权限(如果权限被重置,也在脚本的中间),但没有运气。
adb -P 5037 shell 'pm grant com.android.chrome android.permission.READ_EXTERNAL_STORAGE  android.permission.WRITE_EXTERNAL_STORAGE'
Run Code Online (Sandbox Code Playgroud)
  • browserName: "Chrome"我还尝试指定appPackage and appActivity开始 chrome ,而不是使用。但没有运气。

我从根本上缺少什么吗?这在桌面浏览器上运行良好(使用 selenium)。但是我一直无法在我的移动设备上运行它。

如果还有什么我应该分享的,请告诉我。

在 Appium 上也创建了一个问题:https : //github.com/appium/appium/issues/15293

Roh*_*ule 1

/sdcard/Download/事实证明,Chrome在自动化期间无法访问目录。

尝试从目录上传文件/data/local/tmp/(首先将文件推送到那里)是有效的。

其次,考虑到路径的文件下载和上传场景,Android 9 和 Android 10+ 之间存在细微差别/sdcard/Download/(尚未给出原因):

  1. 如果是文件下载:
  • Android 10及以上版本不请求任何权限(即不弹出对话框)
  • Android 9(可能低于该版本)会打开一个对话框请求权限。
  1. 如果是文件上传:
  • 他们都没有请求任何许可,因此上传失败。

因此,作为上传文件的解决方法,我们有两种方法:

  1. 要么使用其他目录,即/data/local/tmp/(我发现唯一适用于 Android 10 及更高版本的目录)。
  2. (适用于 Android 9 及以下版本)首先下载任何文件,允许/接受请求的权限。然后继续从/sdcard/Download/目录上传。