发送句点“.”时 AWS Device Farm 的 Selenium WebDriver 错误击键到元素

Selenium WebDriver for AWS Device Farm error when sending period "." keystroke to element

我正在将 RSpec/Capybara 测试的测试执行转移到 AWS Device Farm。将单个句点 (".") 发送到字段时遇到问题。这是我的 binding.pry 调试会话:

[5] pry(#<RSpec::ExampleGroups::Drivers>)> find('input[id^="filter"]').set('.')
Selenium::WebDriver::Error::WebDriverError: You are trying to work with something that isn't a file.
from /Users/pfong/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/remote/bridge.rb:422:in `upload'

如果我发送多个字符,它工作正常。但是在这种情况下,我希望在另一种辅助方法中缓慢地一次发送一个密钥。

我不确定为什么当我明显在尝试击键时它认为我正在发送文件。

看起来这是 selenium-webdriver 中的 bug/feature - 当将键发送到元素时,将调用以下代码

def send_keys_to_element(element, keys)
      # TODO: rework file detectors before Selenium 4.0
      if @file_detector
        local_files = keys.first&.split("\n")&.map { |key| @file_detector.call(Array(key)) }&.compact
        if local_files.any?
          keys = local_files.map { |local_file| upload(local_file) }
          keys = Array(keys.join("\n"))
        end
      end
      ...
    end

Selenium 4 更改为在远程驱动程序上有一个默认文件检测器定义为

->((filename, *)) { File.exist?(filename) && filename.to_s }

触发是因为“.”确实存在(当前目录)。解决方法是在创建驱动程序 file_detector 后将其重置为 nil。

current_session.driver.browser.file_detector = nil