java - Selenium 元素位置

标签 java selenium webdriver selenium-webdriver functional-testing

是否有一种简单的方法可以从另一个元素中查找子元素(这两个项目都已使用 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) {
    // 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
}

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

当然,这仍然是猜测。第一种方法可能有误报和漏报(但考虑到我的需要,我更喜欢它),第二种方法应该只有误报。您可以将它们组合起来或自己发明一些东西(例如,正如您已经说过的那样,使用Reflection)。

或者file a bug .

关于java - Selenium 元素位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10018621/

相关文章:

javascript - 使用 xpath 获取并打印出元素

java - 带有列表迭代器的 ClassCastException Java

java - 如何在 "Guess my number "游戏中使用Do While循环?

java - 我无法以 200 的间隔进行图像更新

Python:Selenium Firefox Webdriver 失败并出现错误: 'Can' t 加载配置文件...WARN addons.xpi...”

python - Selenium 回复按钮不起作用

java - Selenium Webdriver : How do I run multiple tests, 在同一个窗口中依次出现?

Java RegEx Matcher.groupCount 返回 0

eclipse - 在Eclipse的XPath中无法使用变量-Selenium

python - 是否可以在不安装浏览器的情况下使用 python 抓取网站?