我尝试使用selenium-webdriver gem将以下代码从使用WebdriverIO移植到Node.js:
@webdriver.navigate.to "https://imgur.com/upload"
element = @webdriver.find_element(:id, 'global-files-button')
element.send_keys("C:\\test\\image.png")
正如您所看到的,代码非常简单:导航到URL,找到输入,设置文件路径,并按预期工作,选择要上载的文件。
这是我的移植版本:
describe('User can upload', () => {
it('select file', () => {
browser.url("https://imgur.com/upload");
browser.waitForExist('#global-files-button');
$('#global-files-button').keys("C : \\ t e s t \\ i m a g e . p n g".split(" "));
});
});
不幸的是,这个测试并没有设置路径,我还没有找到一个使用wdio上传这样一个文件的工作示例,文档让我猜测。任何建议非常感谢。
我知道chooseFile和uploadFile,但我正在使用云平台运行我的wdio测试,而且他们似乎无法可靠地工作。
答案 0 :(得分:4)
我遇到了麻烦。根据我的研究,它不是WebdriverIO的问题,也不是selectFile()或uploadFile()方法。我认为问题的根源归结为Selenium Webdriver无法处理'多个' <input type='file' multiple>
上传元素的错误。
我在这个github问题上磕磕绊绊了3天才打了一场比赛: https://github.com/SeleniumHQ/selenium-google-code-issue-archive/issues/2239
长话短说,因为imgur上的HTML上有“多个”属性,你的上传测试将无法正常工作。 WebdriverIO / Selenium从我注意到的东西中停止运作。
注意:我已经能够让我的应用程序上传单个文件,并在测试<input type='file' multiple>
时将文件添加到我的系统和应用程序中。但问题是,WebdriverIO和Selenium刚刚停止。测试结束,不报告任何成功或失败结果。
如果您在网络上的某个地方测试另一个未被指定为“multiple”上传输入字段的<input type=file>
元素,您应该可以从中创建chooseFile()方法WebdriverIO功能正常。
我希望这可以帮助您,也许还有其他任何一个在文件上传方面都很困难的人。
编辑: 我试图让你的例子工作,我成功地使用“chooseFile()”并直接将“filepath”传递给它。也许你正在尝试发送键盘命令,而你真的不需要?您是否有直接文件路径指向您尝试上传的图片?以下是我能够用来成功上传文件的内容。
it('upload a file to imgur', function () {
browser.url("https://imgur.com/upload");
browser.waitForExist('#global-files-button');
browser.chooseFile('#global-files-button', '/insert/path/to/image.png')
})
答案 1 :(得分:1)
// c:/test/image.png
var test1 = 'c:/test/image.png'
var path = test1.split('/').join('\\\\')
browser.addValue('[name="fileField"]', path )
或者也许这也有效
// c:\test\image.png
var path = 'c:\\test\\image.png'
browser.addValue('[name="fileField"]', path )
或者这个
// c:/test/image.png
var path = 'c:/test/image.png'
browser.addValue('[name="fileField"]', path )