Скриншотилка Ashot не игнорирует элементы на странице

Ссылка на тулзу https://github.com/yandex-qatools/ashot
При создании скриншота с результатом сравнения, на нем отмечены “красным” те элементы, что должны были в теории игнорироваться. Что я делаю не так?

Код:

   //Создаем Эталонный скриншот
  	  Screenshot ExpectedDir = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(driver); 
 	  ImageIO.write(ExpectedDir.getImage(), "png", new File("Screenshot\\Expected.png"));
                 
 	  //Создаем фактический скриншот
 	  Screenshot actualScreenshot = new AShot()
		.shootingStrategy(ShootingStrategies.viewportPasting(100))
		.addIgnoredElement(By.cssSelector(".banner.g-zindex-top[data-banner-id='fp_new_top']"))
		.addIgnoredElement(By.cssSelector(".banner.g-banner__newsfeed[data-banner-id='firstpage_left2']"))
		.addIgnoredElement(By.cssSelector(".banner.g-banner__padding[data-banner-id='firstpage_graph2_new']"))
		.takeScreenshot(driver); 

ImageIO.write(actualScreenshot.getImage(), "png", new File("Screenshot\\Actual.png"));

ExpectedDir.setIgnoredAreas(actualScreenshot.getIgnoredAreas());  

ImageDiff diff = new ImageDiffer()
.makeDiff(ExpectedDir, actualScreenshot);                          
                      
diff.getDiffSize();          
     	  
File diffFile = new File("Screenshot\\markedImages.png");
ImageIO.write(diff.getMarkedImage(), "png", diffFile);
1 лайк

проверяли что элементы находятся по тем локаторам что вы используете ?
даже если да попробуйте локаторы .banner.g-banner__newsfeed[data-banner-id='firstpage_left2'] упростить

1 лайк

Попробуйте shootingStrategy поставить после добавления игнорируемых элементов.
А лучше всего, если необходимо игнорировать несколько элементов, я сделал бы так:

Set<By> setIgnoredElements = setIgnoredElements(
   By.cssSelector(".banner.g-zindex-top[data-banner-id='fp_new_top']"),
   By.cssSelector(".banner.g-banner__newsfeed[data-banner-id='firstpage_left2']"),
   By.cssSelector(".banner.g-banner__padding[data-banner-id='firstpage_graph2_new']"));
Screenshot actualScreenshot = new AShot().ignoredElements(setIgnoredElements).shootingStrategy(ShootingStrategies.viewportPasting(100))
   .takeScreenshot(driver());
1 лайк

Благодаря вам разобрался. Проблема была в том что у меня шапка прикреплена к верху экрана и не пропадает при скроллинге страницы. а висит сверху. я изначально думал ну и пусть. буду так делать скриншоты. но нет… это оказалось критичным. из-за этого не игнорируются динамические элементы в самой шапке. …ну… или как то так… спасибо =)

закрепил следующим кодом:

[details=Summary] JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element1 = driver.findElement(By.cssSelector(".topline.fixed"));
js.executeScript(“arguments[0].setAttribute(‘style’, ‘position: static!important;’)”,element1);[/details]

1 лайк

У меня есть метод Screenshot, в котором я делаю скриншоты, сравниваю их, указываю элемент на который делать скрин)Далле вызываю данный метод в разных тестах.

Столкнулся с проблемой, что в некоторых тестах надо игнорировать некоторые элементы(разное количество), подскажите как прикрутить setIgnoredElements?

@Leon все очень просто, решение взял из примера https://github.com/pazone/ashot

        open("https://www.google.сom/")
        Set<By> setIgnoredElements = new HashSet()
        setIgnoredElements.add(By.cssSelector(".homepage_hero__usecases"))
        setIgnoredElements.add(By.cssSelector(".car_card__header"))
        Screenshot actualScreenshot = new AShot()
                .shootingStrategy(ShootingStrategies.viewportRetina(100, 0, 0, 2))
                .coordsProvider(new WebDriverCoordsProvider())
                .ignoredElements(setIgnoredElements)
                .takeScreenshot(WebDriverRunner.getWebDriver())
        ImageIO.write(actualScreenshot.getImage(), "PNG", new File(pathToFile + "ActualFullPage.png"))
        Screenshot expectedImage = new Screenshot(ImageIO.read(new File(pathToFile + "OriginalFullPage.png")))
        expectedImage.setIgnoredAreas(actualScreenshot.getIgnoredAreas())
        ImageDiff diff = new ImageDiffer().makeDiff(expectedImage, actualScreenshot).withDiffSizeTrigger(10)
        ImageIO.write(diff.getMarkedImage(), "PNG", new File(pathToFile + "DifferenceFullPage.png"))
        if (diff.hasDiff()) {
            ImageIO.write(diff.getMarkedImage(), "PNG", new File(pathToResources + "DifferenceFullPage.png"))
        }
        assertFalse("Screenshot has difference", diff.hasDiff())
1 лайк

Спасибо, уже разобрался.

1 лайк