Проблема: не могу исключить область при сравнении скриншотов при помощи библиотеки AShot
Вопрос: что не так с кодом? Или проблема в самой библиотеке?
Перепробовал я все методы, которые там есть: ignoredAreas(), ignoredElements(), addIgnoredElement(), addIgnoredArea(). Не работает(
Вот один из примеров:
Код
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.comparison.ImageDiff;
import ru.yandex.qatools.ashot.comparison.ImageDiffer;
import ru.yandex.qatools.ashot.coordinates.Coords;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import static com.codeborne.selenide.Condition.visible;
import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.WebDriverRunner.getWebDriver;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class YandexTest {
@Test
public void runTest() throws IOException {
String url ="https://google.com";
String xpath = "//input[@type='text']";
open(url);
$x(xpath).waitUntil(visible, 5000).sendKeys("123yuiouioyioyioioio12312i3yio12y3io12io3");
Set<By> bySet = new HashSet<>();
bySet.add(By.xpath(xpath));
Set<Coords> coords = getCoords(bySet);
System.out.println(Arrays.toString(coords.toArray()));
Screenshot screenshot1 = new AShot()
.shootingStrategy(ShootingStrategies.viewportPasting(500))
.ignoredAreas(coords)
.takeScreenshot(getWebDriver());
Set<Coords> ignoredCoords = screenshot1.getIgnoredAreas();
BufferedImage bufImage1 = screenshot1.getImage();
refresh();
$x(xpath).waitUntil(visible, 5000).sendKeys("789a7df8a98z7zc987c9v7c89zx7897cx89vz7c8x9v");
Screenshot screenshot2 = new AShot()
.shootingStrategy(ShootingStrategies.viewportPasting(500))
.takeScreenshot(getWebDriver());
screenshot2.setIgnoredAreas(ignoredCoords);
BufferedImage bufImage2 = screenshot2.getImage();
ImageDiff diff = new ImageDiffer().makeDiff(bufImage1, bufImage2);
BufferedImage diffImage = diff.getMarkedImage();
createImageFromBuffer(diffImage, "src/main/results/diff.png");
}
protected String createImageFromBuffer (BufferedImage bufImage, String filePath) {
File image = new File(filePath);
try {
ImageIO.write(bufImage, "png", image);
} catch (IOException e) {
e.printStackTrace();
fail();
}
return "Image has been saved: \n"+image.getAbsolutePath();
}
public static Set<Coords> getCoords(Set<By> ignoredElements) {
Set<Coords> ignoredCoords = new HashSet<>();
for (By locator : ignoredElements) {
Point point = $(locator).getLocation();
Dimension dimension = $(locator).getSize();
ignoredCoords.add(new Coords(point.getX(), point.getY(), dimension.getWidth(), dimension.getHeight()));
}
return ignoredCoords;
}
}
В результате имеем вот такой diffImage:
Версии ОС и софта следующие.
Maven:
AShot - 1.5.2
Selenide - 4.9
Geckodriver - 0.19.1