断言图像大小不起作用

Assert image size not working

我正在测试一个响应式网站,如果浏览器尺寸缩小(或在 phone 上查看时),则会使用不同的图像。例如,如果浏览器 window 大于 900 宽图像,则使用尺寸为 (200, 125) 的图像。当浏览器 window 的宽度在 650 到 899 之间时,使用尺寸为 (150, 110) 的图像,当浏览器 window 的尺寸/宽度小于 650 时,使用尺寸为 (100,75) 的图像。我正在尝试使用以下内容对此进行测试:

driver.manage().window().maximize();
assertEquals("(200, 125)",driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div/div/div[2]/div[2]/div[2]/section/ul/li[4]/a/div[1]/img")).getSize());
driver.manage().window().setSize(new Dimension(899, 750));
assertEquals("(150, 110)",driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div/div/div[2]/div[2]/div[2]/section/ul/li[4]/a/div[1]/img")).getSize());
driver.manage().window().setSize(new Dimension(649, 750));
assertEquals("(100, 75)",driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div/div/div[2]/div[2]/div[2]/section/ul/li[4]/a/div[1]/img")).getSize());

这似乎有效,但是当我 运行 这样做时,我收到以下消息:

java.lang.AssertionError: expected: java.lang.String<(200, 125)> but was: org.openqa.selenium.Dimension<(200, 125)>

不确定这意味着什么或如何修复它,代码似乎是正确的。

将 Eclipse 与 Selenium webdriver 和 Java 结合使用。

收到以下答案后,我将代码更改为:

assertEquals("(200, 125)",driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/div/div/div[2]/div[2]/div[2]/section/ul/li[4]/a/div[1]/img")).getSize().toString());

所有解决 AssertionError 的想法都可以工作,如果图像是那个大小,调整浏览器大小会导致图像缩放,这是我无法预测的。

首先,我反对 使用 Selenium 自动执行 visual/layout/rendering 检查。我看到了 UI 测试自动化的好处,但我也很欣赏手动测试及其带来的价值。您希望图像的大小为 200x125。有一天它是 199x124 是什么?用户会发现差异吗?可能不会。你的考试会通过吗?应该不是。

其次,您的 xpath 定位器很脆弱。如果您需要使用 / 超过 3 次,您可能会预计在较小的 UI 重构后您的测试会失败,最终用户可能不会注意到这一点。有很多关于如何创建可靠的 xpath 定位器的好帖子。你可以为他们 google。

如果您仍想将其自动化,您需要做的是将 String 转换为 Dimension,反之亦然。您目前的类型不匹配。