Автоматизирую тест-кейс с помощью 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.
Оставляю здесь, чтобы снова не искать долго-долго-долго.
С вами был Доктор Лексиум.
Всего доброго.
Напишите комментарий