无法单击 shadowroot 中的复选框

unable to click on checkbox within shadowroot

我正在编写一个测试来完成货币注册的测试流程。注册具有出现在流程的不同步骤中的附加组件。我的目标是能够 select 附加阴影根中的复选框,这样我就可以进入下一步。我试图关注的影子根中的元素 看起来 就像它们可以被定位一样,它们是枚举器、数组和哈希。

我需要帮助的是单击复选框,但 .click 方法不适用于我定位的元素。我没有 return .select 的错误,但它似乎也没有做任何事情。

当我逐步执行代码时,我 认为 我正在瞄准以复选框为中心的正确元素。但是 none 我看到的元素似乎是 类 可以“点击”或与之交互的元素。到目前为止我尝试了什么:

sales_channels_reg.execute_script("return arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)).find(css: "label[for='addToCart--false']")

Returns:
#<Enumerator: {"shadow-6066-11e4-a52e-4f735466cecf"=>"416aad9c-c512-496d-93c3-91c17ec6e27d"}:find(css: label[for='addToCart--false'])>
- sales_channels_reg.execute_script("return arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)).find(id: "addToCart--false")

Returns
#<Enumerator: {"shadow-6066-11e4-a52e-4f735466cecf"=>"416aad9c-c512-496d-93c3-91c17ec6e27d"}:find(id: addToCart--false)>
- sales_channels_reg.execute_script("return arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false))

Returns
{"shadow-6066-11e4-a52e-4f735466cecf"=>"416aad9c-c512-496d-93c3-91c17ec6e27d"}
sales_channels_reg.execute_script("return arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)).class

Returns
Hash
sales_channels_reg.execute_script("return arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)).find(id: "addToCart--false").each do |c| puts c, c.class end

Returns
shadow-6066-11e4-a52e-4f735466cecf
416aad9c-c512-496d-93c3-91c17ec6e27d
Array
*** NoMethodError Exception: undefined method `call' for {:id=>"addToCart--false"}:Hash
(byebug) sales_channels_reg.execute_script("return arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)).find(id: "addToCart--false", :visible => false).click
*** NoMethodError Exception: undefined method `click' for #<Enumerator:0x00007fbeb9195558>

nil

我正在写的代码

-第一个文件-

describe "Showing 4 max add-ons in reg flow", type: :feature, service: "sales_channels1" do
  context "yadda yadda" do
    subject(:sales_channels_reg) { SalesChannelsRegGenerals.new }
    subject(:se_signup_page) { SELogin.new }
    # subject(:gen_reg) { RegistrationHelper.new }
    let(:form_number) { "848624247" }

    it "in test flow does thing" do
      couple of other steps first
      byebug (where I'm at in the code now)
    end
  end
end

-不同的文件-

require "./spec/page_models/sales_channels_ncsa_section.rb"
require "./spec/page_models/sales_channels_medsaver_section.rb"
require "./spec/page_models/sales_channels_regsaver_section.rb"
require "./spec/page_models/sales_channels_four_addons_section.rb"

class SalesChannelsRegGenerals < SitePrism::Page
  set_url "https://zachpartyka#{SeleniumTest.ngin_site}/register/form/{/form_number}"

  section :regsaver_section, RegSaverSection, "div#siteContainer2"
end

-不同的文件-

class RegSaverSection < SitePrism::Section
  element :regsaver_testtest, "#pageContentContainer"
end

None 这些值应该是 Enumerators、Hashes 等(除非 site-prism 真的搞砸了 Capybaras returns)。我猜原因是你在应该使用 evaluate_script 的时候使用了 execute_scriptexecute_script 不应在您期望 return 值时使用,并且不会将结果解包到元素引用中,evaluate_script 会。

sales_channels_reg.evaluate_script("arguments[0].shadowRoot", ...)