【问题标题】:unable to click on checkbox within shadowroot无法单击 shadowroot 中的复选框
【发布时间】:2022-01-11 18:49:21
【问题描述】:

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

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

当我单步执行代码时,我认为我正在定位以复选框为中心的正确元素。但我看到的所有元素似乎都不是可以“点击”或与之交互的类。到目前为止我尝试过的:

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

【问题讨论】:

    标签: ruby shadow-dom site-prism


    【解决方案1】:

    这些值都不应该是 Enumerators、Hashes 等(除非站点棱镜真的与 Capybaras 回报搞砸了)。我猜原因是你使用execute_script,而你应该使用evaluate_scriptexecute_script 不应在您期望返回值时使用,并且不会将结果解包到元素引用中,evaluate_script 会。

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

    【讨论】:

    • 我正在使用 evaulate_script 返回结果。 sales_channels_reg.evaluate_script("arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)).find(id: "addToCart--false").classEnumerator
    • 您使用的是什么版本的 selenium-webdriver?确保它是 4.x
    • 解决了!将 gem 更新为 selenium-webdriver (4.1.0) 返回了 Selenium::WebDriver::ShadowRoot 解决方案最终是:shadowroot = sales_channels_reg.evaluate_script("arguments[0].shadowRoot", sales_channels_reg.regsaver_section.regsaver_testtest.find("#sales-channels-element", visible: false)) /n shadowroot.find_element(css: "label[for='addToCart--false']").click
    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多