セクションとサブセクションを含むページをモデル化しようとしていますが、スコーピングで問題が発生しています。
私が定義しているセクションは、階層内の DOM で次のように見つけることができます。
html > body > div.page-background > div#wrapper > div#content > div#primary > ... > div#reserve-search
そのため、CSS セレクターdiv#reserve-searchを使用してページのセクションを定義しました。ただし、このセクションのボタンをクリックすると、操作が必要なポップアップ パネルが表示されます。ポップアップは論理的にはセクションの一部ですが、DOM の別の場所にあります。
html > 本文 > div#オーバーレイアドレス
これは私を束縛します。現在のコードは次のようになります。
class ReserveSearchPage < SitePrism::Page
section :reserve_search_section, ReserveSearchSection, "div#reserve-search"
end
class ReserveSearchSection < SitePrism::Section
section :overlay_address_section, OverlayAddressSection, "div#overlay-address"
element :address_section_button, "a#button"
def interactWithAddressSection
address_section_button.click
wait_until_overlay_address_section_visible
...
end
end
class OverlayAddressSection < SitePrism::Section
elements :things, "blah#stuff"
...
end
上記の問題は、 を呼び出そうとするとinteractWithAddressSection
、のスコープOverlayAddressSection
によって定義されているReserveSearchSection
ため、実際にはdiv#reserve-search div#overlay-address の下の DOM のサブセクションを探すことです。サブセクションがそこにないため、呼び出しがタイムアウトし、サブセクションが見つかりません。
このサブセクションをより大きなセクション内に定義したいと思います。これは、間違いなく論理的に属し、アクセスする必要がある場所です。親セクションのスコープを使用せずにサブセクションのロケーターを定義する方法はありますか?
明らかに、サブセクションが DOM の親セクション内に存在する方が便利で「適切」ですが、技術的にはページの非常に異なる部分に存在する、このように定義された多くのポップアップとパネルを見てきました。構造は、DOM の別の部分のサブセクションとしてモデル化する必要がありますが。おそらくある種の絶対セレクターでサブセクションを定義することによって、親セクションのスコープから抜け出す方法があるはずです。そのような方法は存在しますか?そうでない場合、他の回避策はありますか?