Вот вам 2 ссылки где можно посмотреть примеры xpath
содержит текст
А код ругается, потому что вы у локатора пытаетесь вызвать метод GetAttribute, которого у него нет, вызывать нужно у элемента на странице. (проблема в скобках)
13 публикаций создано vladMat (учитываются публикации только с 20 апреля 2023)
Отправлено автор: vladMat 07 января 2021 - 06:47 в Selenium - Functional Testing
Вот вам 2 ссылки где можно посмотреть примеры xpath
содержит текст
А код ругается, потому что вы у локатора пытаетесь вызвать метод GetAttribute, которого у него нет, вызывать нужно у элемента на странице. (проблема в скобках)
Отправлено автор: vladMat 07 января 2021 - 06:40 в Selenium - Functional Testing
Очень похоже что неправильно определен контекст self.driver. self.driver должен инициализироваться в BasePage, тогда в методы BasePage попадет правильный контекст.
Первое что могу предложить, это убрать в функции do_send_keys - WebDriverWait(self.driver, time).until(EC.visibility_of_element_located(locator),
message=f"Не нашел куда написать. Адрес: {locator}")
Для пробы заменить их на time.wait и self.driver.find_element(*locator).send_keys(text)
Отправлено автор: vladMat 22 декабря 2020 - 04:15 в Тест-дизайн и ручное тестирование
Не вижу связи с pytest bdd. У вас на скриншоте исключение выбросил селениум elementclickinterceptedexception. Выше по трассировки есть место в вашем коде которое исполнялось, вот там и копать надо дальше. Отладка в консоль + временные задержки
Отправлено автор: vladMat 19 октября 2020 - 19:17 в Selenium - Functional Testing
Ок, какие есть варианты:
1. Неправильный контекст browser, возможно браузер ищет не на нужной странице. Можно попробовать найти элемент body взять innerHTML и проверить поиском что элемент '#Category_listbox li' есть в body
2. Возможно на странице есть iframe, тогда вначале нужно провалиться в этот iframe
3. Возможно элемент появляется на странице динамически, проверяется добавлением задержки в 5-10 секунд перед кликом
4. Можно отдебажить через console.log, подсовывая разные элементы, это все через execute_script
5. То же что и в 4 пункте, но с помощью alert
Отправлено автор: vladMat 15 октября 2020 - 04:50 в Автоматизированное тестирование
А вас не смущает что вы импортировали webdriver из appium а потом перезаписали этот webdriver, другим webdriver из selenium?
from appium import webdriver as appium_webdriver from selenium import webdriver as selenium_webdriver
Если и так не заработает, то могу предложить отказаться от использования браузера, а сделать проверку кода с помощью запроса на сервер (библиотека requests), в response проверите финальный урл, если залогинен, то тест положителен
Отправлено автор: vladMat 15 октября 2020 - 04:38 в Selenium - Functional Testing
Могу предложить:
1. Воспользоваться сторонними интеграциями типа Sentry (exceprionы отправляет сервер)
2. Смотреть серверные логи
Отправлено автор: vladMat 15 октября 2020 - 04:28 в Selenium - Functional Testing
Так я выбрал элемент из списка (список с пунктами можно предварительно не открывать)
document.querySelectorAll('#categories_listbox li')[2].click()
[2] - третий элемент в списке
Другой способ:
Как говорил раньше, есть скрытый инпут, который и передает на сервер значение (номер) выбранной категории https://prnt.sc/uzl5as
Если знаете чем заполнять, то можно сразу инпут заполнить
document.querySelector('#categories').value = "3"
Если изначально неизвестно чем заполнять, то значение можно получить так:
document.querySelectorAll('#categories_listbox li')[2].dataset.offsetIndex
Отправлено автор: vladMat 13 октября 2020 - 01:22 в Selenium - Functional Testing
Честно говоря, на словах тяжело понять что вам надо.
1. в span нельзя задать какой-то элемент из списка. Возможно значение элемента передается в скрытый input или select
2. на практике была проблема с react приложением и execut_script - самое простое, добавить временную задержку, посложнение - Webdriver.wait
Отправлено автор: vladMat 04 октября 2020 - 22:24 в Selenium - Functional Testing
Попробуйте не использовать jquery. Воспользуйтесь базовым синтаксисом js: document.querySelector() илил document.getElementById
Отправлено автор: vladMat 19 августа 2020 - 03:29 в Selenium - Functional Testing
Не уверен, что это "правильный" вариант, но могу предложить:
1) тесту точно не нужно знать об объекте select
2) В объекте корзины я бы создал вложенный объект товар
class CartPage(ProductDetailPage): class Product: def __init__(self, browser) def select_size(self, value): select = Select(self.browser.find_element*CartPageLocators.SELECT_SIZE) select.select_by_index(value)
Тогда вызов в тесте будет:
cart_page.Product().select_size(1)
Отправлено автор: vladMat 19 августа 2020 - 03:12 в Автоматизированное тестирование
Как минимум можно воспользоваться регулярным выражением
Отправлено автор: vladMat 06 августа 2020 - 05:21 в Автоматизированное тестирование
0) В safari включили возможность автоматизированного управления?
1) Какую команду для запуска используете?
2) Какой stack trace?
3) В какой среде запускаете выполнение кода?
Отправлено автор: vladMat 02 июля 2020 - 03:25 в Автоматизированное тестирование
Была у меня аналогичная задача. Стандартное .find_element_by_xpath(location).screenshot_as_png работало хорошо в firefox, в chrome не работало, если не ошибаюсь. Тогда в интернете нашел вариант ниже. Он снимает скриншот видимой области, прокручивает страницу, делает еще скриншот, и так далее. Потом все это склеивает в один скриншот. Данное решение работает в firefox, chrome, safari. Проблема возникнет, если на сайте есть закрепленные элементы, на склеенном скриншоте они будут повторяться (пример: закрепленная шапка сайта в мобильной версии)
.
from io import BytesIO from selenium import webdriver from PIL import Image, ImageChops, ImageDraw def full_screenshot(browser: webdriver, offset: int = 0) -> Image: """ Получение полного скриншота содержимого окна браузера offset - начальное смещение""" img_list = [] # для хранения фрагментов изображения # Определение размера окна браузера height = browser.execute_script("""return Math.max( document.documentElement.clientHeight, window.innerHeight );""") # Определение высоты содержимого окна браузера max_window_height = browser.execute_script("""return Math.max( document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight );""") # Скроллим страницу и добавляем скриншот видимого окна браузера в img_list while offset < max_window_height: browser.execute_script(f"window.scrollTo(0, {offset});") img = Image.open(BytesIO((browser.get_screenshot_as_png()))) img_list.append(img) offset += height # Обрезание последнего изображения box = (0, height - height * (max_window_height / height - max_window_height // height), img_list[-1].size[0], img_list[-1].size[1]) img_list[-1] = img_list[-1].crop(box) # Определение размеров нового изображения, создание холста img_frame_height = sum([img_frag.size[1] for img_frag in img_list]) img_frame = Image.new('RGB', (img_list[0].size[0], img_frame_height)) # Объединение изображений в одно offset = 0 for img_fragment in img_list: img_frame.paste(img_fragment, (0, offset)) offset += img_fragment.size[1] return img_frame
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru