您好我有基于extJS的UI。我正面临重叠页面的问题。 例如:我有一个页面,其中有一个按钮,它将打开一个面板类的东西(注意:它不是一个单独的框架,也不是一个单独的窗口。它在与父页面DOM相同的DOM内部打开)。面板与底层页面重叠。面板在其样式属性中具有z-index。现在我想确定这个面板上的控件。我怎么能在selenium webdriver中做到这一点。也可能是面板和底层页面可能具有相同的控件(但底层控件不活动)。那么我们如何识别这样的控制呢? TIA。 嗨,我想添加UI的屏幕截图,但我无法添加,因为它说我需要至少10声誉发布图像。我怎么能获得10个声誉? 此外,还有一些控件出现在两个页面上,即重叠页面和重叠页面。而且,作为一个基于extJS的UI,id会自动生成,CSSLocator将识别出现在UI上的控件并且类似。所以我想我只剩下一个选项以某种方式跳进面板然后识别控件。我尝试使用driver.switchTo.activeElement,假设底层控件处于非活动状态,但它仍然没有帮助我。在这方面有任何帮助。 TIA
附上截图。现在您可以看到我突出显示的面板与底层页面重叠,它也存在于重叠页面的DOM中。 一些指针:1)我尝试使用XPath但这无济于事,因为我将不得不为UI中的每个此类控件硬编码xpath(我正在尝试动态生成xpath但它仍在进行中。) 2)无论如何我们可以告诉驾驶员选择具有焦点并且处于活动状态的控制。 DOM源太大而无法粘贴。 有问题的控件是屏幕截图中显示的“开始查询”按钮,该按钮存在两次,可以在页面中多次出现。 我正在研究您建议的解决方案。
答案 0 :(得分:0)
由于屏幕截图中只显示了几行DOM,因此我只能猜测您的情况。
我假设你有类似这样的DOM:
<button id='ext-gen343'>Start query</button>
<div id="ext-gen1829" class=" x-window" style="width: 30px; height: 85px; margin: 0px; left: 0px; top: 0px; visibility: visible; display: block;">
<button id='ext-gen1920'>Start query</button>
</div>
首先找到窗口,然后使用cssSelector或Xpath找到里面的按钮。
// Note that I used 'display: block;' to ensure we are looking for the active/visible window.
WebElement btnStartQueryInside = driver.findElement(By.XPath("//div[contains(@class, 'x-window') and contains(@style, 'display: block;')]//button[text()='Start query']"));
对于你的观点#2,driver.switchTo.activeElement
是你想要的,你之前提到过的。但这不是一个优雅的解决方案,甚至根本不会工作。