В какой-то момент появилась идея заносить отчёты в систему отслеживания ошибок прямо из тестов... но прикинув пока решил, что очень громоздко получается :)
И вот во время прикидывания наткнулся на интересный кусочек кода, создающий скриншоты и сохраняющий их в файлы...
void recordStep(String name) throws AWTException {
File screenshot = new File(new File("."), name + ".png");
Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 0, screenDim.width, screenDim.height));
try {
ImageIO.write(image, "png", screenshot);
} catch (IOException ignore) {
ignore.printStackTrace();
}
}Объяснять как работает этот метод не буду, т.к. во-первых, многие и сами понимают, а во-вторых, это сделали лучше меня там, где я этот код нашёл:
Здесь все очень просто. В качестве параметра мы передаем имя файла для скриншота.
Потом:
-объявляем файл, в качестве директории я использую здесь текущую( можно сделать в качестве параметра).
-получаем размеры скриншота.
-в BufferedImage помещаем скриншот, сделанный с помощью возможностей класса Robot.
- и наконец - создаем(помещаем) наш скриншот в сам png-файл.И вот такое чудо получается:
import com.thoughtworks.selenium.*;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import javax.imageio.ImageIO;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
*
* @author makeenkov
*/
public class bnwintop extends SeleneseTestCase {
String time = new SimpleDateFormat("dd.MM.yyyy HH.mm.SS").format(new java.util.Date());
void recordStep(String name) throws AWTException {
File screenshot = new File(new File("."), name + ".png");
Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 0, screenDim.width, screenDim.height));
try {
ImageIO.write(image, "png", screenshot);
} catch (IOException ignore) {
ignore.printStackTrace();
}
}
@Override
public void setUp() {
selenium = new DefaultSelenium("localhost", 4444, "*opera", "http://www.google.com");
selenium.start();
}
public void test() throws Exception {
System.out.println("Итак начнём: " + time);
selenium.open("/");
selenium.waitForPageToLoad("30000");
selenium.type("q", "black and white");
selenium.click("btnG");
selenium.waitForPageToLoad("30000");
if (selenium.isTextPresent("Расходные материалы для лазерных принтеров") && selenium.isTextPresent("blacknwhite.ru") && selenium.isTextPresent("Картриджи по оптовым ценам: 589-49-04 Расходные материалы для лазерных принтеров.")) {
System.out.println("Сайт в индексе в топ-5");
} else {
System.out.println("Сайт выпал из индекса или из топ-5");
selenium.windowFocus(); //Gives focus to the currently selected window
selenium.windowMaximize(); //Resize currently selected window to take up the entire screen
recordStep("индекс_топ-5_" + time);
}
selenium.close();
selenium.stop();
System.out.println("Конец: " + new SimpleDateFormat("dd.MM.yyyy HH.mm.SS").format(new java.util.Date()));
}
public static Test EnterGoogle() {
return (Test) new TestSuite(bnwintop.class);
}
public static void main(String args[]) {
junit.textui.TestRunner.run(EnterGoogle());
}
}Этот тест контролирует нахождение сайта в топ-5 googl'а и в случае ошибки делает скриншот с участниками топ-5, собственно вот, файл индекс_топ-5_05.06.2010 16.50.155.png
Может быть не всегда применимо, но мне нравится :) постараюсь развить идею с автоматическим занесением отчётов, тогда и отпишусь....
Отлично! Спасибо за информацию.
ОтветитьУдалитьидея заносить отчёты в систему отслеживания ошибок прямо из тестов – это просто супер – я надеюсь Вам удастся её развить и Вы обязательно ей поделитесь :-) ... автоматизация – это наше ВСЁ.
Удачи!
Спасибо!
ОтветитьУдалитьОбязательно отпишусь о результатах :)