Selenium webdriver 我如何处理技术上不属于节的元素和子节';什么范围?
我试图对一个包含节和子节的页面进行建模,但在范围界定方面遇到了麻烦 我定义的部分可以在DOM中的层次结构中找到,如下所示: html>body>div.page-background>div#wrapper>div#content>div#primary>…>div#reserve search 因此,我使用CSS选择器div#reserve search定义了页面上的部分。但是,单击此部分中的按钮会弹出一个需要与之交互的面板。尽管弹出窗口在逻辑上是部分的一部分,但它位于DOM的不同部分: html>body>div#覆盖地址 这使我陷入困境。当前代码看起来有点像这样:Selenium webdriver 我如何处理技术上不属于节的元素和子节';什么范围?,selenium-webdriver,site-prism,Selenium Webdriver,Site Prism,我试图对一个包含节和子节的页面进行建模,但在范围界定方面遇到了麻烦 我定义的部分可以在DOM中的层次结构中找到,如下所示: html>body>div.page-background>div#wrapper>div#content>div#primary>…>div#reserve search 因此,我使用CSS选择器div#reserve search定义了页面上的部分。但是,单击此部分中的按钮会弹出一个需要与之交互的面板。尽管弹出窗口在逻辑上是部分的一部分,但它位于DOM的不同部分: ht
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
class ReserveSearchPage
上面的问题是,当我试图调用interactivewithaddresssection
时,OverlayAddressSection
是由ReserveSearchSection
的作用域定义的,因此它实际上在DOM中的div#reserve search div#overlay address下查找子节。因为子分区不在那里,所以调用超时,找不到子分区
我想在更大的部分中定义这个子部分,这肯定是它在逻辑上所属的位置以及需要访问的位置。是否有任何方法可以在不使用父节范围的情况下定义子节的定位器
显然,在DOM中,子节存在于其父节中更方便和“正确”,但我见过许多这样定义的弹出窗口和面板,技术上它们位于页面的一个非常不同的部分,即使结构肯定应该建模为DOM不同部分的子节。似乎应该有一种方法让我突破父节的范围,也许可以用某种绝对选择器定义子节。这种方法存在吗?如果没有,还有其他解决办法吗?我在无意中创建了一个新帐户后发布了此消息。我相信我已经回答了我自己的问题。和我的大多数问题一样,我的答案很简单 假设没有神奇的解决方案,我只是将
OverlayAddressSection
aSitePrism::Page
而不是SitePrism::Section
。我可以在一个部分中创建和调用此页面,而不需要页面的任何元素或部分继承整个部分的范围
这似乎是一个很好的解决方案,希望很少出现的问题