我正在为一家公司编写自动化测试用例。一个有趣的问题是网页上的文本相互重叠,是否有任何方法可以对此进行验证?



#1 楼

我认为您正在尝试检测元素是否重叠。在客户端,您将需要某种方式来告诉您两个元素是否发生冲突。我会为此或某些自定义JavaScript代码尝试jQuery冲突。


将jQuery和jQuery冲突添加或注入到要测试的Web应用程序中
使用Selenium javascriptExecutor触发一个两个元素上的碰撞检测
检查返回值中是否存在碰撞


#2 楼

如果此重叠文本属于单个元素,则说标签或文本字段。您可以找到该元素并使用“ webElement.Text.Contains(”您要验证的文本“);”验证所需文本的方法。

如果重叠的文本属于不同元素,则只需定位该特定元素并验证该元素的文本即可。

,会有所帮助。
谢谢

#3 楼

我的想法如下:

driver = webdriver.Firefox()
e = driver.find_element_by_xpath("//someXpath")
location = e.location
size = e.size
print(location)
print(size)


如果我可以得到一个元素的大小和位置,并且给定一个元素是对称的,我也可以计算它的边界。只要一个要素的寄宿生不会与其他要素交叠,我会说它们没有重叠。

#4 楼

public boolean areElementsOverlapping(WebElement element1, WebElement element2) {
    Rectangle r1 = element1.getRect();
    Point topRight1 = r1.getPoint().moveBy(r1.getWidth(), 0);
    Point bottomLeft1 = r1.getPoint().moveBy(0, r1.getHeight());

    Rectangle r2 = element2.getRect();
    Point topRight2 = r2.getPoint().moveBy(r2.getWidth(), 0);
    Point bottomLeft2 = r2.getPoint().moveBy(0, r2.getHeight());

    if (topRight1.getY() > bottomLeft2.getY()
            || bottomLeft1.getY() < topRight2.getY()) {
        return false;
    }
    if (topRight1.getX() < bottomLeft2.getX()
            || bottomLeft1.getX() > topRight2.getX()) {
        return false;
    }
    return true;
}


每个元素都有矩形尺寸,因此在这里我们要检查2个矩形是否相对于屏幕坐标系相互重叠。有关更多上下文,请阅读WebElement的getRect,getSize和getLocation方法。

PS:这是JAVA特定的答案,但是我希望您可以按照您的编程语言来使用它。

评论


请添加您的解决方案的说明。

– Nitin Rastogi
19年6月13日在10:18

更新@NitinRastogi

– Nipun Saini
19年8月2日在16:38