Ruby/Selenium/Watir-Webdriver: "path is not absolute" 绝对路径错误

Ruby/Selenium/Watir-Webdriver: "path is not absolute" error for absolute path

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

与其中一位开发人员交谈,她说 "Browser does it to fake things out, so the filesystem isn't exposed"。不确定这是否有助于解决我的问题,或者我是 SOL?

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

为什么

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 而不是 set?

我未能重现您的问题。如果您提供您的 html,也许这将是可能的。但我建议你试试:

filename_field.set(document_path)

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

另一个建议

这是一个弱得多的想法。但是...

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

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

该错误来自 Chromedriver,并且来自向文件元素发送不正确的路径字符串。由于 :tab 不是路径,因此会正确引发错误。

您不需要发送标签;只需发送文件的路径即可满足您的需求。

我在使用 Chromedriver 2.26.436421 时遇到了同样的问题,当我删除发送 Tab 键的代码后问题就解决了。

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