Как нажать на изображение в Selenium Вебдрайвер

⚡ Умное резюме

Нажмите на изображение в Selenium WebDriver требует использования CSS-селекторов или стратегий XPath, поскольку элементы изображений не отображают текст ссылки. В этой статье объясняется, как найти изображение, инициировать действие клика и убедиться в успешности навигации.

  • 🇧🇷 Основное действие: Используйте driver.findElement(By.cssSelector(…)).click() для выполнения клика по любому элементу изображения, отображаемому внутри ссылки.
  • 🎯 Выбор локатора: Методы By.linkText и By.partialLinkText не работают для изображений, поэтому необходимы методы By.cssSelector или By.xpath.
  • 🧪 Этап проверки: Подтвердите успешный клик, сравнив новый заголовок страницы с ожидаемой строкой назначения, полученной с помощью driver.getTitle().
  • 🤖 Помощь ИИ: Современные плагины на основе ИИ предлагают стабильные CSS-селекторы и автоматически исправляют локаторы при изменении разметки приложения или значений атрибутов.
  • 🇧🇷 Общие подводные камни: Скрытые, отложенно загружаемые или перекрывающиеся изображения часто требуют явного ожидания, прокрутки для отображения или JavaДля корректной регистрации скрипта нажмите на кнопку.

Нажмите на изображение в Selenium

Нажатие на изображение в Selenium WebDriver — распространенная задача, когда значок, логотип или миниатюра выступают в роли навигационной ссылки. Поскольку изображения не содержат видимого текста, традиционные локаторы текста ссылки не работают, и требуется более надежная стратегия выбора.

Доступ к ссылкам на изображения

Изображения-ссылки — это якоря на веб-страницах, представленные изображением, при нажатии на которое браузер переходит в другое окно или на другую страницу.

Поскольку это изображения, мы не можем использовать методы By.linkText() и By.partialLinkText(), так как ссылки на изображения вообще не содержат текста.

В этом случае следует использовать либо By.cssSelector, либо By.xpath. Первый метод, как правило, предпочтительнее из-за своей простоты и читаемости.

В приведенном ниже примере мы получим доступ к логотипу «Facebook» в верхней левой части страницы восстановления пароля Facebook.

Доступ к ссылкам на изображения

Для доступа к ссылке на изображение мы воспользуемся By.cssSelector и атрибутом «title» элемента. Затем мы проверим, что браузер перенаправил нас на главную страницу Facebook.

Java Code Пример

Следующие Selenium Фрагмент кода WebDriver запускает Chrome, открывает страницу восстановления пароля Facebook, кликает на изображение логотипа Facebook и отображает заголовок получившейся страницы.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class MyClass {

    public static void main(String[] args) {
        String baseUrl = "https://www.facebook.com/login/identify?ctx=recover";
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get(baseUrl);
        // click on the "Facebook" logo on the upper left portion
        driver.findElement(By.cssSelector("a[title=\"Go to Facebook home\"]")).click();

        // verify that we are now back on Facebook's homepage
        if (driver.getTitle().equals("Facebook - log in or sign up")) {
            System.out.println("We are back at Facebook's homepage");
        } else {
            System.out.println("We are NOT in Facebook's homepage");
        }
        driver.close();
    }
}

Результат

Нажмите на изображение в Selenium Вебдрайвер

Рекомендации по правильной фотосъемке

Несколько полезных привычек сделают автоматизацию кликов по изображениям более надежной во всех браузерах и размерах экрана.

  • Отдавайте предпочтение стабильным атрибутам, таким как title, alt, aria-label или data-*, вместо глубоко вложенных CSS-путей.
  • Перед выполнением клика добавьте явное ожидание WebDriverWait для элемента ElementToBeClickable.
  • Для изображений с отложенной загрузкой прокрутите элемент, чтобы он стал видимым, с помощью JavascriptИсполнитель первым.
  • Если прозрачное наложение перехватывает клик, следует использовать резервный вариант. JavaСкрипт выполняет клик по нижележащему элементу.
  • Проверьте корректность навигации с помощью driver.getTitle() или уникального элемента на целевой странице.

Как ИИ улучшает стратегии поиска изображений

Инструменты тестирования с использованием ИИ, такие как TestimMabl и Healenium анализируют DOM вокруг изображения и предлагают самовосстанавливающиеся локаторы. Когда имя класса или атрибут изменяется после выпуска, фреймворк автоматически заменяет его на наиболее стабильную альтернативу, что снижает количество сбоев при навигации на основе значков.

Инженеры также могут использовать ChatGPT или GitHub Copilot для генерации фрагментов кода WebDriver, предложения надежных выражений CSS или XPath для изображения и составления утверждений для страницы, загружаемой после клика. Сгенерированный код все равно следует проверить на корректность, а также на обработку ожиданий и наложений.

Заключение

Нажатие на ссылки с изображениями в Selenium WebDriver прост в использовании, если выбрать надежный локатор. Наиболее читабельный подход — это использование `by.cssSelector` с атрибутами `title` или `alt`, `by.xpath` — запасной вариант, если разметка неудобна, а явные ожидания делают скрипт надежным при многократном запуске.

Часто задаваемые вопросы (FAQ)

Найдите изображение с помощью By.cssSelector или By.xpath, используя стабильный атрибут, такой как title, alt или aria-label, затем вызовите метод .click() для возвращенного WebElement. Проверьте результат с помощью driver.getTitle() или уникального элемента на целевой странице.

Да. Такие инструменты, как... TestimMabl и ChatGPT анализируют окружающий DOM и предлагают стабильный селектор на основе атрибутов title, alt, aria-label или data. Инженерам все равно следует проверять сгенерированный локатор на уникальность и отказоустойчивость.

Самовосстанавливающийся локатор — это функция искусственного интеллекта, которая заменяет исходный селектор альтернативным, если он не работает. Такие фреймворки, как Healenium и Mabl, отслеживают изменения атрибутов вокруг изображения и выбирают наиболее стабильную замену, что уменьшает количество нестабильных тестов после обновления пользовательского интерфейса.

Оба локатора срабатывают по видимому тексту внутри ссылки. Ссылка на изображение оборачивает тег <img> и не отображает текстовый узел, поэтому совпадение всегда возвращает пустое значение. Вместо этого используйте By.cssSelector или By.xpath с title, alt или aria-label.

Если наложение, модальное окно или всплывающая подсказка перекрывают изображение, прокрутите его, чтобы оно стало видимым, с помощью JavascriptДобавьте в Executor событие WebDriverWait для ElementToBeClickable. В качестве запасного варианта выполните следующее: JavaНажмите на элемент WebElement, чтобы обойти наложение.ping слой.

Проверьте новый заголовок страницы с помощью driver.getTitle(), используя текущий заголовок. URL Проверка осуществляется с помощью driver.getCurrentUrl() или при наличии уникального элемента на целевой странице. Сочетание этих проверок позволяет тесту с уверенностью утверждать, что клик действительно инициировал навигацию.

Подведем итог этой публикации следующим образом: