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

ashot
selenium
java
Теги: #<Tag:0x00007f7b6a31d7a0> #<Tag:0x00007f7b6a31d4a8> #<Tag:0x00007f7b6a31d228>

(Николай Кротов) #1

Ссылка на тулзу 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);

(Сергей Кузьмин) #2

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


(Maksim Zhvirblia) #3

Попробуйте 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());

(Николай Кротов) #4

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

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

[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]


(stek) #5

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

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