问题描述
当我尝试在saucelabs虚拟测试中将a.jpg文件上传到我的应用程序时,出现错误。
使用driver.SendKey()将文件上传到ucelab 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 /在OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)处的branch = heads / 3729 @ {#29}),platform = Linux 4.15.0-54-generic x86_64)(在OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String)在OpenQA.Selenium.Remote.Remote处的driverCommandToExecute,Dictionary 2 parameters) at OpenQA.Selenium.Appium.AppiumDriver
1.Execute(字符串driverCommandToExecute,Dictionary 2 parameters) at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute,Dictionary
2个参数)在OpenQA.Selenium.Remote处的(String commandToExecute,Dictionary`2个参数)。 BST10Web.Framework.UI.Helpers.UiElementHelpers.EnterText(IWebElement元素,字符串值
解决方法
使用调味料存储也无法做到这一点。在测试开始之前,只能访问酱汁存储,以调配要使用的机器(更改寄存器,安装应用程序等)
您不能在测试执行期间访问存储,另请参见https://wiki.saucelabs.com/display/DOCS/Temporary+Storage+Methods
,问题
仅出于将来请求者的利益,这就是为什么在远程控制的浏览器中上传文件很棘手的原因。
选择要通过网络表单上传的文件时,确实发生的事情是,您用要上传的文件的路径填写了文件输入的值。
就是说,您要告诉表单文件在硬盘上的位置,仅此而已。提交表单时,浏览器进入硬盘驱动器,找到文件,然后将其发送到服务器。
浏览器必须能够访问您要上传的文件。当您的浏览器与文件在同一台计算机或网络上运行时,这不是问题...但是远程浏览器在同一台计算机或网络上没有。就浏览器而言,您要上传的文件不存在,并且测试失败。
解决方案
您可以使用File Detectors在Selenium中解决此问题。
文件检测器只是您提供给Selenium驱动程序的一部分代码,它可以让您确定使用function App() {
const [count,setCount] = useState(0);
function incrementCount() {
setCount((prevCount) => prevCount + 1);
}
function decrementCount() {
setCount((prevCount) => prevCount - 1);
}
let items = [];
for (let number = 0; number < 10; number++) { // <-- 0-index
items.push(
<Pagination.Item
key={number}
onClick={() => setCount(number)} // <-- enclose current number/index value
active={number === count} // <-- compare to current count value
>
{number + 1} // <-- transform data to displayable value
</Pagination.Item>
);
}
const paginationBasic = (
<div>
<Pagination>
<Pagination.Prev onClick={decrementCount} />
{items}
<Pagination.Next onClick={incrementCount} />
</Pagination>
</div>
);
return (
<div>
<p>Hello Stack</p>
{paginationBasic}
</div>
);
}
方法发送的值是否是文件的路径。如果认为是,Selenium绑定将执行以下操作:
- 在本地计算机上查找文件并将其压缩
- 将压缩文件发送到远程计算机上的临时目录
- 解压缩文件
- 获取文件在远程计算机上的位置,并将该位置传递给使用
send_keys
输入的文件
因此,现在,文件和与浏览器位于同一台计算机上,和知道在哪里可以找到它。繁荣!您可以将文件上传到Web应用。
Sauce Labs的文档中有an example of File Detectors个可用于其服务。
精美文件检测器
由于文件检测器采用字符串并返回文件路径,因此您也可以使用它们使代码更具模块化和可重用性。
例如,如果您从多个测试中上载相同的电子表格,则可以创建一个文件检测器,如果它接收到字符串send_keys
,则返回该电子表格路径。然后,如果工作表的位置发生变化,则只需在文件检测器中对其进行更新。
或者,如果您需要上传不同大小的图像,则可以编写一个文件检测器,该文件检测器将图像大小作为输入,使用imagemagick创建该大小的图像。