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 键需要触发文件输入的更改事件,但在最新的版本中,它似乎只会导致问题,并且在没有它的情况下也会触发更改事件。
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 键需要触发文件输入的更改事件,但在最新的版本中,它似乎只会导致问题,并且在没有它的情况下也会触发更改事件。