В Selenium как сравнить изображения? - PullRequest
1 голос
/ 10 февраля 2012

Поскольку меня попросили автоматизировать веб-сайт нашей компании, используя Selenium Automation.Но я новичок в работе с Selenium, но я изучил основы Selenium IDE и RC.Но меня очень смущает то, как сравнивать реальные и оригинальные изображения, как мы обычно это делаем в других инструментах автоматизации.Как мы можем прийти к результату, что есть ошибка на сайте?Это очевидно через сравнение изображений, но мне интересно, поскольку селен является одним из очень популярных инструментов, но у него нет возможности сравнения изображений.С другой стороны, я сомневаюсь в правильности моего подхода к процессу автоматизации!Может кто-нибудь, пожалуйста, помогите мне ..

Спасибо заранее !!Санджай С

Ответы [ 5 ]

2 голосов
/ 03 июня 2015

У меня было одно и то же задание. Мне нужно было сравнить более 3000 изображений на веб-странице. Прежде всего я прокрутил страницу, чтобы загрузить все изображения:

public void compareImage() throws InterruptedException {
    driver.get(baseUrl);
    driver.manage().window().maximize();

    JavascriptExecutor executor = (JavascriptExecutor) driver;

    Long previousHeight;
    Long currentHeight;

    do {
       previousHeight = (Long) executor.executeScript("return                document.documentElement.scrollHeight");

        executor.executeScript("window.scrollBy(0, document.documentElement.scrollHeight)");
        Thread.sleep(500);
        currentHeight = (Long) executor.executeScript("return        document.documentElement.scrollHeight");
    } while (Long.compare(previousHeight, currentHeight) != 0);

после того, как я сравнил размер всех изображений с первым изображением (или вы можете просто указать размер):

List<WebElement> images = driver.findElements(By.cssSelector("img[class='playable']"));
    List<String> errors = new LinkedList<>();

    int imgWidth, imgHeight, elWidth, elHeight;
    int imgNum = 0;

    imgWidth = images.get(0).getSize().getWidth();
    imgHeight = images.get(0).getSize().getHeight();


    for (WebElement el : images) {
        imgNum++;

        elWidth = el.getSize().getWidth();
        elHeight = el.getSize().getHeight();

        if (imgWidth != elWidth || imgHeight != elHeight) {
            errors.add(String.format("Picture # %d has incorrect size (%d : %d) px"
                    , imgNum, elWidth, elHeight));
        }
    }

    for (String str : errors)
        System.out.println(str);

    if (errors.size() == 0)
        System.out.println("All images have the same size");
}
0 голосов
/ 08 июля 2016

Эта функция C # вычисляет допуск

private static bool CalculateTolerance(Byte FirstImagePixel, Byte SecondImagePixel, Double TolerasnceInPercent)
    {
        double OneHundredPercent;
        double DifferencesInPix;
        double DifferencesPercentage;


        if (FirstImagePixel > SecondImagePixel)
        {
            OneHundredPercent = FirstImagePixel;
        }
        else
        {
            OneHundredPercent = SecondImagePixel;
        }

        if (FirstImagePixel > SecondImagePixel)
        {
            DifferencesInPix = FirstImagePixel - SecondImagePixel;
        }
        else
        {
            DifferencesInPix = SecondImagePixel - FirstImagePixel;
        }

        DifferencesPercentage = (DifferencesInPix * 100) / OneHundredPercent;

        DifferencesPercentage = Math.Round(DifferencesPercentage, 2);

        if (DifferencesPercentage > TolerasnceInPercent)
        {
            return false;                
        }

        return true;
    } 
0 голосов
/ 08 июля 2016

Сравнение изображений на C #. Чтобы получить точные результаты, я рекомендую отключить функцию браузера сглаживания, прежде чем делать снимки экрана, в противном случае пиксели каждый раз будут немного различаться. Например, параметры элемента HTML canvas .AddArgument ("disable-canvas-aa");

private static bool ImageCompare(Bitmap bmp1, Bitmap bmp2, Double TolerasnceInPercent)
    {
        bool equals = true;
        bool flag = true;  //Inner loop isn't broken

        //Test to see if we have the same size of image
        if (bmp1.Size == bmp2.Size)
        {
            for (int x = 0; x < bmp1.Width; ++x)
            {
                for (int y = 0; y < bmp1.Height; ++y)
                {
                    Color Bitmap1 = bmp1.GetPixel(x, y);
                    Color Bitmap2 = bmp2.GetPixel(x, y);

                    if (Bitmap1.A != Bitmap2.A)
                    {
                        if (!CalculateTolerance(Bitmap1.A, Bitmap2.A, TolerasnceInPercent))
                        {
                            flag = false;
                            equals = false;
                            break;
                        }
                    }
                    if (Bitmap1.R != Bitmap2.R)
                    {
                        if (!CalculateTolerance(Bitmap1.R, Bitmap2.R, TolerasnceInPercent))
                        {
                            flag = false;
                            equals = false;
                            break;
                        }
                    }
                    if (Bitmap1.G != Bitmap2.G)
                    {
                        if (!CalculateTolerance(Bitmap1.G, Bitmap2.G, TolerasnceInPercent))
                        {
                            flag = false;
                            equals = false;
                            break;
                        }
                    }
                    if (Bitmap1.B != Bitmap2.B)
                    {
                        if (!CalculateTolerance(Bitmap1.B, Bitmap2.B, TolerasnceInPercent))
                        {
                            flag = false;
                            equals = false;
                            break;
                        }
                    }

                }
                if (!flag)
                {
                    break;
                }
            }
        }
        else
        {
            equals = false;
        }
        return equals;
    }
0 голосов
/ 11 февраля 2012

imagemagick и imagediff также являются двумя хорошими инструментами для сопоставления изображений.Вам потребуется Selenium RC и знание языка программирования для работы с ним.

0 голосов
/ 10 февраля 2012

Поскольку вы упоминаете знания о Selenium RC, вы можете легко расширить возможности Selenium, используя библиотеку для выбранного вами языка программирования. Например, в Java вы можете использовать класс PixelGrabber для сравнения двух изображений и подтверждения их соответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...