SikuliFirefoxDriver. Откуда брать картинку?

Приветствую. Решил на проекте попробовать SikuliFirefoxDriver. Вот тут все показано и рассказано для того чтобы начать использовать его. Я не совсем понимаю откуда они берут такой URL картинки. (например, new URL(“https://dl.dropbox.com/u/5104407/lakewood.png”)). Картинки я нарезал, сложил в папку resources, в результате теста получаю - “java.net.MalformedURLException: no protocol: ./resources/AAA.png”, т.к URL принимает на вход ftp, http, https и т.д. Подскажите, пожалуйста как решить проблему?

Берут с дропбокса.
Можете попробовать преобразовать локальный путь к URL: Paths.get(filePath).toUri().toURL();

Или переопределить / перегрузить метод findImageElement. ImageTarget имеет конструктор с File параметром. Просто автор видимо писал все это дело под себя, не сильно заморачиваясь о других возможных кейсах.

К слову, я бы не рекомендовал использовать эту библиотеку, исходя из даты последнего релиза - Nov 2012. Смею предположить, что версия самого драйвера там древнючая, т.е. почти наверняка у вас тест упадет сразу после загрузки браузера (который я уверен - одной из последних версий).

Да и в целом, SikuliX в полной мере сможет выполнить все то же самое. Отличие лишь в дополнительной обертке.

1 Like

Браузер открывается, осуществляется переход по урлу, но картинку не находит. Видимо как то неправильно задаю путь. Буду смотреть в сторону SikuliX.

new URL("file:///full/path/to/AAA.png")
1 Like

Не получается выполнить пока даже самый элементарный тест - зайти на google, и нажать кнопку “Войти” (справа, вверху). Картинка кнопки имеется
Картинка лежит в D:/temp/enter.png
Вот код:

@Test
    public void firstSikuliTest() throws Exception {
        SikuliFirefoxDriver driver = new SikuliFirefoxDriver();
        driver.get("http://www.google.ru");
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        ImageElement image = driver.findImageElement(new URL("file:///D:/temp/enter.png"));
        image.click();
    }

В результате открывается браузер, переход на google, и все, ничего не происходит. В консоли NPE
UPD: Убрал driver.manage().window().maximize(); и заработало!

А как быть, если на экране 2 и более абсолютно одинаковых элемента? Например 6 кнопок “Купить” А кликнуть надо естественно по какой-то конкретной.

Уже говорил, повторюсь, - использовать SikuliX. Там есть методы навигации относительно искомого элемента. Можно найти уникальный компонент и сместиться вверх / вниз / вправо / влево по-пиксельно.

3 Likes