You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Rails 6.1.4在GitHub Action中无法填充Action Text富文本的问题求助

解决Rails 6.1.4系统测试中Trix编辑器在GitHub Action的交互问题

我之前在处理Rails系统测试中的Trix编辑器时也遇到过几乎一模一样的问题,尤其是在GitHub Actions这类CI环境下,无头浏览器的渲染和本地环境确实存在一些差异。下面是几个我亲测有效的解决方案,你可以逐一尝试:

1. 增加等待时间确保元素完全加载

CI环境的网络和页面加载速度通常比本地慢,直接查找元素可能会因为元素还未渲染完成而失败。你可以给find方法加上wait参数,延长等待时间:

find("trix-editor", wait: 10).set("Something")

或者先等待元素可见后再操作:

page.has_css?("trix-editor", wait: 10) # 等待10秒直到元素出现
find("trix-editor").set("Something")

2. 模拟真实用户的激活操作

Trix编辑器需要先被点击激活才能接受输入,无头浏览器下可能不会自动激活元素。你可以先点击编辑器再设置内容:

trix_editor = find("trix-editor")
trix_editor.click
trix_editor.set("Something")

或者用send_keys模拟真实输入,有时候这种方式比set更可靠:

find("trix-editor").click.send_keys("Something")

3. 调整无头浏览器的配置参数

GitHub Actions中默认的Chrome无头模式可能因为窗口尺寸过小、沙箱限制等问题导致元素不可交互。你可以在test_helper.rb中修改Chrome的启动参数:

Capybara.register_driver :selenium_chrome_headless do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  # 设置足够大的窗口尺寸,避免元素被隐藏
  options.add_argument("--window-size=1920,1080")
  options.add_argument("--disable-gpu")
  options.add_argument("--no-sandbox") # 解决CI环境下的权限问题
  options.add_argument("--disable-dev-shm-usage") # 避免共享内存不足的问题
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.default_driver = :selenium_chrome_headless

4. 直接操作Trix的隐藏输入字段

Trix编辑器背后其实对应一个隐藏的input元素,你可以直接给这个输入框赋值,绕过编辑器的交互问题。这个方法通常是最稳定的,尤其是在CI环境下:

# 替换成你实际的字段名称,比如post[body]
find('input[name="your_model[your_body_field]"]', visible: false).set("Something")

你可以通过查看页面源码找到这个隐藏input的name属性,一般格式是模型名[富文本字段名]

5. 排查未合并Rails代码的生效问题

你提到的未合并Rails修复代码,要确保它在CI环境中确实被正确加载了:

  • 检查CI的bundle install是否包含了修改后的代码(如果是本地修改的文件,要确保已经提交到仓库)
  • 确认test_helper.rb中正确引入了这些修复代码

关于更换CI服务商的建议

暂时不建议急着更换CI服务商,因为大部分Trix在CI的问题都是环境配置或等待逻辑的问题,上面的方法基本能解决90%的情况。如果所有方法都尝试后依然失败,再考虑切换到GitLab CI或CircleCI,但大概率是配置问题导致的,而非服务商本身的问题。

内容的提问来源于stack exchange,提问作者Bradley Marques

火山引擎 最新活动