Перейти к содержимому

Техники локализации плавающих дефектов
онлайн, начало 19 апреля
Тестирование безопасности
онлайн, начало 21 апреля
Тестирование мобильных приложений
онлайн, начало 21 апреля
Автоматизатор мобильных приложений
онлайн, начало 21 апреля

Публикации vladMat

13 публикаций создано vladMat (учитываются публикации только с 20 апреля 2020)


#178558 Помогите, пожалуйста, написать условие...webdriver JS firefox

Отправлено автор: vladMat 07 января 2021 - 06:47 в Selenium - Functional Testing

Вот вам 2 ссылки где можно посмотреть примеры xpath
содержит текст

не содержит класс

 

А код ругается, потому что вы у локатора пытаетесь вызвать метод GetAttribute, которого у него нет, вызывать нужно у элемента на странице. (проблема в скобках)




#178556 Загрузка файла

Отправлено автор: 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)


 




#178476 Проблема в Pytest BDD тест запускатется, но некоторые шаги не работают

Отправлено автор: vladMat 22 декабря 2020 - 04:15 в Тест-дизайн и ручное тестирование

Не вижу связи с pytest bdd. У вас на скриншоте исключение выбросил селениум elementclickinterceptedexception. Выше по трассировки есть место в вашем коде которое исполнялось, вот там и копать надо дальше. Отладка в консоль + временные задержки




#177751 Selenium + python + Kendo

Отправлено автор: 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




#177717 Selenium и Appium в одном тесте

Отправлено автор: 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 проверите финальный урл, если залогинен, то тест положителен




#177716 Извлечение лога из Firefox. Получаю ошибку HTTP method not allowed.

Отправлено автор: vladMat 15 октября 2020 - 04:38 в Selenium - Functional Testing

Могу предложить:
1. Воспользоваться сторонними интеграциями типа Sentry (exceprionы отправляет сервер)

2. Смотреть серверные логи




#177714 Selenium + python + Kendo

Отправлено автор: 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



#177698 Selenium + python + Kendo

Отправлено автор: vladMat 13 октября 2020 - 01:22 в Selenium - Functional Testing

Честно говоря, на словах тяжело понять что вам надо.

1. в span нельзя задать какой-то элемент из списка. Возможно значение элемента передается в скрытый input или select

2. на практике была проблема с react приложением и execut_script - самое простое, добавить временную задержку, посложнение - Webdriver.wait




#177671 Selenium + python + Kendo

Отправлено автор: vladMat 04 октября 2020 - 22:24 в Selenium - Functional Testing

Попробуйте не использовать jquery. Воспользуйтесь базовым синтаксисом js: document.querySelector() илил document.getElementById




#177368 Selenium+Python+Page Object, работа с Select

Отправлено автор: 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)



#177367 Postman: Как взять значение переменной из url ответа?

Отправлено автор: vladMat 19 августа 2020 - 03:12 в Автоматизированное тестирование

Как минимум можно воспользоваться регулярным выражением




#177302 Selenium Python Safari не выводятся ошибки

Отправлено автор: vladMat 06 августа 2020 - 05:21 в Автоматизированное тестирование

0) В safari включили возможность автоматизированного управления?

1) Какую команду для запуска используете?

2) Какой stack trace?

3) В какой среде запускаете выполнение кода?




#177110 Как в автотестах python+selenium делать полностаничные скриншоты?

Отправлено автор: 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

 





Яндекс.Метрика
Реклама на портале