有没有一种简单的方法可以从另一个元素中查找子元素(这两个项目都已使用 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()
and getText()
并测试外部文本是否包含内部元素。一种方法是:
public static void assertContains(WebElement outer, WebElement inner) {
// e.g. //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
}
...或类似的东西。它可能是归一化空间() http://www.w3.org/TR/xpath/#function-normalize-space or 包含() http://www.w3.org/TR/xpath/#function-contains(或两者)将被需要,因为标签中的标签中的标签中的标签...
当然,这仍然是猜测。第一种方法可能有误报和漏报(但考虑到我的需要,我更喜欢它),第二种方法应该只有误报。您可以将它们组合起来或自己发明一些东西(例如使用Reflection
正如你已经说过的)。
Or 提交错误 http://code.google.com/p/selenium/issues/entry.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)