【问题标题】:Unable to upload file to mobile web app via sauce-storage in sauce labs virtual test无法通过酱实验室虚拟测试中的酱存储将文件上传到移动网络应用程序
【发布时间】:2021-01-05 09:18:55
【问题描述】:

当我尝试在 saucelabs 虚拟测试中将 .jpg 文件上传到我的应用程序时,出现错误。

使用 driver.SendKey() 将文件上传到 saucelab VM 机中的应用程序。我正在尝试找出使用 SendKeys 从酱汁存储中获取 jpg 文件的正确路径。请帮忙

代码:

{
        IAllowsFileDetection allowsDetection = driver as IAllowsFileDetection;
                        if (allowsDetection != null)
                        {
                            allowsDetection.FileDetector = new LocalFileDetector();
                        }

                        driver.SendKeys(element, "sauce-storage:oldtraford.jpg");
 } 

错误: 测试失败并出现错误:OpenQA.Selenium.WebDriverException:未知错误:路径不是绝对路径:sauce-storage:oldtraford.jpg(会话信息:chrome=74.0.3729.185)(驱动程序信息:chromedriver=74.0.3729.6(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/ branch-heads/3729@{#29}),platform=Linux 4.15.0-54-generic x86_64) 在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) 在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary2 parameters) at OpenQA.Selenium.Appium.AppiumDriver1.Execute(String driverCommandToExecute, Dictionary2 parameters) at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute, Dictionary2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.SendKeys(字符串文本)在 BST10Web.Framework.UI.Helpers.UiElementHelpers.EnterText(IWebElement 元素,字符串值

【问题讨论】:

  • 如果您使用的是 SauceLabs,您可以获得他们的支持。只需提交一张票。
  • 我确实提交了一张票。谢谢
  • 这不是支持可以解决的问题,因为它不受官方支持

标签: c# selenium selenium-webdriver appium saucelabs


【解决方案1】:

酱汁存储也无法做到这一点。酱汁存储可访问在测试开始之前配置您要使用的机器(更改注册表、安装应用程序等)

无法在测试执行期间访问存储,另请参阅 https://wiki.saucelabs.com/display/DOCS/Temporary+Storage+Methods

【讨论】:

  • 你说得对,我无法从酱汁存储上传测试。在进行测试的应用程序中上传文件的最佳方式是什么?
  • 不建议这样做,可能很难做到,但这是我很久以前为 WebdriverIO 创建的一个 repo,你也许可以弄清楚如何做到这一点github.com/sauce-archives/…跨度>
【解决方案2】:

问题

为了将来的请求者的利益,这就是为什么在远程控制的浏览器上上传文件很棘手。

当您在网络表单中选择要上传的文件时,真正发生的是您正在使用要上传的文件的路径填写文件输入的值。

也就是说,您要告诉表单文件在硬盘上的位置,仅此而已。当您提交表单时,浏览器会转到您的硬盘驱动器,找到文件并将其发送到服务器。

浏览器必须能够访问您正在上传的文件。当您的浏览器与文件在同一台计算机或网络上运行时,这不是问题……但远程浏览器不在在同一台计算机或网络上。就浏览器而言,您上传的文件不存在,您的测试失败。

解决方案

您可以在 Selenium 中使用 File Detectors 解决此问题。

文件检测器只是您提供给 Selenium 驱动程序的一段代码,它可以让它确定您使用 send_keys 方法发送的值是否是文件的路径。如果它认为是,Selenium 绑定会执行以下操作:

  1. 本地计算机上找到文件并压缩
  2. 将压缩文件发送到远程计算机上的临时目录
  3. 解压文件
  4. 获取文件在远程计算机上的位置,并使用send_keys将该位置传递给文件输入

所以现在,文件与浏览器在同一台计算机上,并且浏览器知道在哪里找到它。繁荣!您可以将文件上传到您的网络应用程序。

Sauce Labs 的文档有 an example of File Detectors 用于他们的服务。

精美的文件检测器

由于文件检测器采用字符串并返回文件路径,因此您还可以使用它们使您的代码更加模块化和可重用。

例如,如果您从多个测试上传同一个电子表格,您可以创建一个文件检测器,如果它接收到字符串 sheet,则返回该电子表格路径。然后,如果工作表的位置发生变化,您只需在文件检测器中更新它。

或者,如果您需要上传不同大小的图像,您可以编写一个文件检测器,将图像大小作为输入,使用 imagemagick 创建该大小的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2018-10-10
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2022-01-22
    • 2019-03-02
    相关资源
    最近更新 更多