首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >硒元素定位

硒元素定位
EN

Stack Overflow用户
提问于 2012-04-05 04:17:01
回答 1查看 3.4K关注 0票数 2

有没有一种简单的方法可以从另一个元素中找到一个子元素(这两个元素都是使用PageFactory定位的)?我们有一组容器,其中包含许多模块,我希望确保它们显示在正确的位置。

该API似乎只有以下方法:

代码语言:javascript
复制
webElement.findElement(s).(By by);

有没有一种简单的方法来做以下事情:

代码语言:javascript
复制
webElement.findElement(s)(WebElement webElement);

或者更好:

代码语言:javascript
复制
webElement.contains(WebElement webElement);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-05 05:35:11

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

代码语言:javascript
复制
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);
}

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

代码语言:javascript
复制
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
}

...or类似的东西。这是可能的,将需要normalize-space()contains() (或两者),因为标签中的标签中的标签在...

当然,这仍然是一种猜测。第一种方法可能有假阳性和假阴性(但考虑到我的需要,我更喜欢它),第二种方法应该只有假阳性。你可以将它们组合在一起,或者自己发明一些东西(例如,使用你已经说过的Reflection )。

或者file a bug

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10018621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档