首页 > 解决方案 > rspec SitePrism 无法识别 #shadow-root 中的链接

问题描述

我在测试套件中使用 rspec,SitePrism。我有一个正在通过测试流程的测试,最后一步有一个 i-framed 产品。我无法验证该元素是否存在,因为它位于#shadow-root 中。我们的套件中有一个类似的测试在不同的页面上工作,但设置类似,所以我认为这应该是可行的。但到目前为止还没有奏效。

我正在寻找一种打印我能够定位的整个 html 结构的方法(以查看它的外观作为前进的线索)。或者,如果有人知道如何定位 #shadow-root 部分中的任何唯一元素 - 这将为我解决这个问题。

我尝试添加睡眠以确保已加载影子根。我已经尝试将上面的目标定位到 shadow-root 内带有 id# 标记的任何内容。我在识别外部容器时没有问题(从 to ,div id="sales-channels-element__container"> ;但是尝试使用测试文件第 37 行中的影子根目录以下的任何内容都将返回:

     Failure/Error: shadow_root_robby = medsaver_reg.execute_script("return arguments.shadowRoot", medsaver_reg.medsaver_addon.medsaver_offer)
 
 Capybara::ElementNotFound:
   Unable to find css "#addToCart--true" within #<Capybara::Node::Element tag="div" path="/HTML/BODY[1]/DIV[2]/DIV[3]/DIV[2]/DIV[1]/DIV[2]/DIV[1]">

我正在运行的测试文件:

it "shows MedSaver as an add-on when available" do
  medsaver_reg.load
  expect(medsaver_reg.pageone_header).to be_visible
  medsaver_reg.se_bar_sign_in.click
  expect(se_signup_page.sign_up_header).to have_content("Welcome")
  club_assign_user_login # this user is also for an actionable redirect test, but this test is for a specific test persona within
  medsaver_reg.continue_button.click
  expect(medsaver_reg.pagetwo_header).to be_visible
  medsaver_reg.participant_selection.click
  medsaver_reg.continue_button.click
  expect(medsaver_reg.pagethree_header).to be_visible
  medsaver_reg.med_coverage.click
  medsaver_reg.dob_month_input.click
  medsaver_reg.dob_month_selection.click
  medsaver_reg.dob_day_input.click
  medsaver_reg.dob_day_selection.click
  medsaver_reg.dob_year_input.click
  medsaver_reg.dob_year_selection.click
  medsaver_reg.gender_selection.click
  medsaver_reg.continue_button.click
  expect(medsaver_reg.pagefour_header).to be_visible
  medsaver_reg.continue_button.click
  sleep(10)

  # shadow_root = registration_page.execute_script("return arguments[0].shadowRoot", registration_page.create_reg_modal.payment_term_selector)
  # puts medsaver_reg.medsaver_addon
  # puts medsaver_reg.medsaver_addon.medsaver_offer
  # puts medsaver_addon.medsaver_offer
  # puts medsaver_reg.medsaver_offer
  byebug
  shadow_root_robby = medsaver_reg.execute_script("return arguments.shadowRoot", medsaver_reg.medsaver_addon.medsaver_offer)
  expect(shadow_root_robby).to be_visible
end

页面对象模型文件:

require "./spec/page_models/medsaver_modal"

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

  element :pageone_header, "h2", id: "displayBodyHeader"
  element :se_bar_sign_in, "a", id: "nb-sign-in-link"
  element :continue_button, "input", class: "button-large"
  element :pagetwo_header, "span", text: "Who Are You Registering?", :match => :first
  element :participant_selection, "input", id: "persona_id_76225149"
  element :pagethree_header, "span", text: "Information", :match => :first
  element :med_coverage, "input", id: "form_result_20735744_59529456"
  element :dob_month_input, "select", id: "form_result_20735717_month"
  element :dob_month_selection, "option", text: "January"
  element :dob_day_input, "select", id: "form_result_20735717_day"
  element :dob_day_selection, "option", text: "31", :match => :first
  element :dob_year_input, "select", id: "form_result_20735717_year"
  element :dob_year_selection, "option", text: "2000"
  element :gender_selection, "input", id: "form_result_20735718_59529365"
  element :pagefour_header, "span", text: "Review", :match => :first
  # element :medsaver_validation, "svg", match: :first # unsure if this is the best way to find this element?
  # element :medsaver_validation, "a", text: "Disclaimer"

  section :medsaver_addon, MedsaverModal, "#sales-channels-element__container"
end

阴影根模态:

class MedsaverModal < SitePrism::Section
  element :medsaver_offer, "#sales-channels-element"
end

我试图定位的html页面:

html截图1

html截图2

标签: domcapybarasite-prism

解决方案


推荐阅读