selenium元素位置

有没有一种简单的方法可以从另一个元素中找到一个子元素(这两个项目都是使用PageFactory定位的)? 我们有一套容纳许多模块的容器,我想确保它们显示在适当的位置。

API似乎只有以下方法:

webElement.findElement(s).(By by); 

有一种简单的方法可以执行以下操作:

 webElement.findElement(s)(WebElement webElement); 

甚至更好:

 webElement.contains(WebElement webElement); 

我终于得到了你需要的东西。 我最好的解决方案是:

 public static void assertContains(WebElement outerElem, WebElement innerElem) { // get borders of outer element Point outerLoc = outerElem.getLocation(); Dimension outerDim = outerElem.getSize(); int outerLeftX = outerLoc.getX(); int outerRightX = outerLeftX + outerDim.getWidth(); int outerTopY = outerLoc.getY(); int outerBottomY = outerTopY + outerDim.getHeight(); // get borders of inner element Point innerLoc = innerElem.getLocation(); Dimension innerDim = innerElem.getSize(); int innerLeftX = innerLoc.getX(); int innerRightX = innerLeftX + innerDim.getWidth(); int innerTopY = innerLoc.getY(); int innerBottomY = innerTopY + innerDim.getHeight(); // assures the inner borders don't cross the outer borders final String errorMsg = "ughh, some error message"; final boolean contains = (outerLeftX <= innerLeftX) && (innerRightX <= outerRightX) && (outerTopY <= innerTopY) && (innerBottomY <= outerBottomY); assertTrue(errorMsg, contains); } 

......只有当这些容器都没有重叠时才有效。 如果他们这样做,我会尝试使用innerElem.getTag()getText()测试一些黑暗和狂野的魔法,并测试外部文本是否包含内部元素。 一种方法:

 public static void assertContains(WebElement outer, WebElement inner) { // eg //div[text()='some text in inner element'] final String findInner = ".//" + inner.getTagName() + "[text()='" + inner.getText() + "']"; try { outerElem.findElement(By.xpath(findInner)); } catch (NoSuchElementException ignored) { fail("Some horrible message! We are all doomed!"); } // passed } 

...或类似的东西。 由于标签中的标签位于...中,因此可能需要normalize-space()或contains() (或两者)。

而且,当然,这仍然是猜测。 第一种方法可能有误报和否定(但我更喜欢它,考虑到我的需要),第二种方法应该只有误报。 您可以将它们组合在一起或自己创造一些东西(例如,如您所说,使用Reflection )。

或者提交错误 。