Ruby / Selenium / Watir-Webdriver:"路径不是绝对的"绝对路径的错误

时间:2016-05-16 20:38:56

标签: css ruby selenium watir-webdriver

document_name ='TestDoc'
document_path = ("/Users/Me/QA/Project/Documents/#{document_name}")

File.new ("/Users/Me/QA/Project/Documents/#{document_name}") # => File is created
filename_field.send_keys("#{document_path}")
filename_field.send_keys :tab # => To Trigger event but where error occurs

filename_field = browser.file_field(:name,' file')在其他地方的模块中声明。

据我所知,我提供了上传文件的文件名的绝对路径,但是当发送tab键时,出现以下错误:

Selenium::WebDriver::Error::UnknownError: unknown error: path is not absolute:

在RubyMine中使用奇怪的squiggly symbol,这是我以前从未见过的。有什么想法吗?

更新

我添加了

puts filename_field.value 
# => C:\fakepath\TestDoc

向其中一位开发人员发言,她说"浏览器是为了伪造东西而做的,所以文件系统并没有暴露出来#34;。不确定这是否有助于解决我的问题或我是SOL?

3 个答案:

答案 0 :(得分:0)

我在你的代码中看到了很多奇怪的东西。

为什么

document_path = ("/Users/Me/QA/Project/Documents/#{document_name}")

document_path = "/Users/Me/QA/Project/Documents/#{document_name}"

为什么

filename_field.send_keys("#{document_path}")

filename_field.send_keys(document_path)

但主要问题是您使用 send_keys 而不是设置的原因?

我无法重现您的问题。也许你可以提供你的HTML。但我建议你试试:

filename_field.set(document_path)

因为你可以轻松地检查它,即使使用irb,send_keys在firefox和chrome中的表现也不同。所以可能有问题。

另一个建议

这是一个更为薄弱的想法。但...

尝试在更改前清除值。你可以用javascript:

来做
b.execute_script("arguments[0].value=''", field)

答案 1 :(得分:0)

该错误来自Chromedriver,来自向文件元素发送错误的路径字符串。由于{{1}}不是路径,因此它正确地引发错误。

您不需要发送标签;只需发送文件的路径就可以完成你需要的工作。

答案 2 :(得分:0)

我和Chromedriver 2.26.436421有同样的问题,当我删除了发送Tab键的代码时它就解决了。

使用以前的Chromedriver发送选项卡键需要触发文件输入的更改事件,但是使用最新版本时,它似乎只会导致问题并且在没有它的情况下触发更改事件。