Ruby / Capybara - 尝试将 DOM 转换为 JQUERY 并添加新的 HTML 属性

Ruby / Capybara - Trying to convert a DOM to JQUERY and add a new HTML attribute

我正在尝试为下面的选择器添加 "id",但是它不起作用,因为该元素似乎是 DOM。如何为 JQuery 转换 DOM 元素,然后添加 "id" 属性?

script = '$(".block-header__helper-menu .ml1").attr("id", "tempid")';
page.execute_script(script)

假设您正在处理的页面已加载 JQuery 并且您已检查元素在 运行 脚本之前存在,那么您显示的脚本应该可以正常工作。但是,您在评论中添加的两个元素(将来如果您编辑问题会更好,以便元素可以更好地格式化)都是无效的,因为您需要在之前完成 (>) button 元素打开子 span 元素。不确定这是由于注释格式问题还是您的 html 中存在错误。假设 HTML 是有效的(或者你修复了它)确实不需要使用 JQuery 来做你正在做的事情,所以如果页面没有 JQuery加载然后你可以做类似

的事情
page.execute_script('document.querySelector(".block-header__helper-menu .ml1").id = "tempid")

如果您已经通过 Capybara 找到了该元素(以确保它存在),那么您可以这样做

element = page.find('.block-header__helper-menu .ml1')
...
element.execute_script('this.id = "tempid"')

也就是说,确实没有必要为这些元素分配 ID。您只需使用 Capybara 方法上可用的选项来定位各个按钮。要单击它们,您可以使用按钮的文本

click_button 'A-'
click_button 'A+'

或者如果您只想查找按钮元素,则可以是 find(:button, 'A-'),等等

或者您可以通过属性差异找到元素,然后单击它们

find('button[data-ga-action="zoom-out"]').click
find('button[data-ga-action="zoom-in"]').click

如果你真的需要找到内联跨度(通常不是要与之交互的元素,而是你最初 jQuery 添加 id 的目标)那么你也可以使用文本内容来找到它

find('span.inline', text: 'A-')

等等