https://www.lexium.ru/2022/05/kak-vydelit-tekst-na-stranice-s-pomoshhyu-python-selenium/

Как выделить текст на странице с помощью Python Selenium

Автоматизирую тест-кейс с помощью Python Selenium. Дохожу до очередного шага, а там написано «Проверка копирования названия отчетов» и скриншот, где виден выделенный заголовок.

Т.е. кто-то навёл мышку на начало заголовка, зажал правую кнопку, дотянул до конца заголовка, и отпустил. А теперь, нужно это дело повторить, чтобы убедиться, что текст можно выделить.

Я потратил несколько часов, чтобы реализовать данный шаг. Чего только не делал. В итоге, получилась вот такая функция, на базе запуска js.

def select_string_by_css(self, css_selector):
    script1 = f"var rttt = document.createRange();" \
              f"rttt.selectNode(document.querySelector('{css_selector}'));" \
              f"document.getSelection().removeAllRanges();" \
              f"document.getSelection().addRange(rttt);"
    script2 = f"return document.getSelection().toString();"
    self.browser.driver.execute_script(script1)
    return str(self.browser.driver.execute_script(script2)).split("\n")[0]

Функция принимает на вход css-селектор элемента, где находится заголовок, а возвращает содержимое выделения.

В ходе тестов выяснилось, что на выход иногда попадают переносы строк и даже какие-то фрагменты текста из соседних областей. Пришлось обрезать по значку переноса строк.

Код выкладываю как есть. Поскольку функция является методом класса, там присутствует self.
self.browser.driver — это объект Webdriver.

А вот и сам js. Вытащил его с какого-то сайта и добавил чуть-чуть отсебятины.

var rttt = document.createRange();
var css_selector = "h1";
rttt.selectNode(document.querySelector('{css_selector}'));
document.getSelection().removeAllRanges();
document.getSelection().addRange(rttt);
var result = document.getSelection().toString();

Таким образом, селектор будет в переменной css_selector, а результат (в нашем случае — выделенный текст) — в переменной result.

Оставляю здесь, чтобы снова не искать долго-долго-долго.

С вами был Доктор Лексиум.
Всего доброго.

Напишите комментарий