通过 xpath 获取特定类的最后添加元素到 DOM

我的网站生成任意数量的弹出窗口(请不要评判我的监控策略)。每个弹出窗口都是一个复杂的 div,我最终希望通过 xpath 引用它,但我特别想要添加到 DOM 的最后一个,因为它将是最上面的那个。

所以我试过这个

//*[@class="popupContent"][last()]

我知道我可以试试这个

(//*[@class="popupContent"])[2]

但我不知道有多少这些弹出窗口。

但是在屏幕上同时有多个弹出窗口的情况下,我会得到第一个的引用(我不确定这是否可靠)。这些弹出窗口中的每一个都有一个 popupContainer,但对于这个问题,它是不受限制的。

鉴于此类中有多个元素,我如何才能获得最上面的元素(因此是交互式的)?

这些东西不是兄弟姐妹、孩子或彼此的父母。此外,我不知道在任何给定时间页面上存在多少。除了我知道其中一个内部组件 (popupContent) 的类之外,我也无法控制弹出窗口的内容或结构。

如果这是不可能的,请解释原因。

我正在寻找在 Java Selenium 测试环境中兼容的解决方案。请不要jquery。


哈士奇WWW
浏览 225回答 3
3回答

沧海一幻觉

根据这个问题:Do WebDriver findElements 在其检索时保留表行顺序findElements 保证顺序,因此在 Selenium 环境中,我可以从中获取列表并检索最后一项。List<WebElement> popups = findElements(By.classname("popup"));WebElement activePopup = popups.get(popups.size - 1);

繁华开满天机

另一种方法可能是查找具有最高 z-index 值的弹出窗口:private WebElement getTopPopUp() {&nbsp; &nbsp; List<WebElement> allPopUps = driver.findElements(By.classname("popup"));&nbsp; &nbsp; WebElement topPopUp = allPopUs.get(0);&nbsp; &nbsp; for(WebElement popUp : allPopUs) {&nbsp; &nbsp; &nbsp; &nbsp; if(Integer.parseInt(popUp.getCssValue("z-index")) > Integer.parseInt(topPopUp.getCssValue("z-index"))) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; topPopUp = popUp;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return topPopUp;}

慕妹3146593

Xpath(//*[@class="popupContent"])[last()]和下面的代码应该给你相同的结果 - DOM 中的最后一个元素:List<WebElement> popups = driver.findElements(By.className("popup"));WebElement activePopup = popups.get(popups.size - 1);如果最后一个元素不是最上面的元素,请尝试获取焦点元素:WebElement focused = driver.switchTo().activeElement();if (focused.getAttribute("class").equals("popupContent"))&nbsp; &nbsp; //my active/interactive popup您可以检查最后一个现在是否处于活动状态:WebElement lastOne = driver.findElement(By.xpath("(//*[@class="popupContent"])[last()]"));if (lastOne.equals(driver.switchTo().activeElement()))//last one is active
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java