t.me/atinfo_chat Telegram группа по автоматизации тестирования

не загружается (отображается) элемент чатры (chatra.io)

webdriver
python
Теги: #<Tag:0x00007f9c4ca7e078> #<Tag:0x00007f9c4ca7df10>

#1

При запуск браузера и загрузки страницы вебдрайвром не загружается (отображается) элемент чатры (chatra.io)

Python 3, webdriver, pytest, chrome, ubuntu

Я открываю страницу chatra.io и ищу кнопку в нижнем левом углу:

def click_by_button_chat(driver):
    driver.get('https://chatra.io/')
    button_chat = WebDriverWait(driver, 10).until((EC.element_to_be_clickable((By.CSS_SELECTOR,".container__header"))))
    button_chat.click()

И кнопки нет.
Но, если страницу загружаю в ручную, не используя вебдрайвер, то всё загружается и кнопка есть.

Как быть, как достучатсья до элемента?

P.S. Причем обратил внимание, что в случае запуска браузера вебдрайвером, не только кнопки нет, но и загружается английская локаль, а не русская


#2

Смотрите, кнопка чата, которую вы ищите, находится в отдельном фрейме - в данном случае, chatra__iframe. То есть, по умолчанию, когда страница загружаеться, селекторы могут достучаться только к элементам из top фрейма. В вашем же случае надо написать в тесте дополнительную команду:
driver.switch_to.frame (iframe), а перед этим вытащить по селектору нужный фрейм, i.e. “chatra__iframe”
Должно сработать: slight_smile:

P.S. сделала скриношты - что б было понятней :slight_smile:



#4

Всё равно не работает:frowning:

driver.get('https://chatra.io/')
iframe = driver.find_element_by_id("chatra__iframe")
driver.switch_to.frame(iframe)
button_chat =WebDriverWait(driver, 5).until((EC.element_to_be_clickable((By.CSS_SELECTOR,"#main"))))
button_chat.click()

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


#5

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

  1. какой exception видает тест - Timeout, элемент не найден?
  2. если есть скриншоты / видео зафейленого теста - постмотрите, загружаеться ли этот чат элемент вообще.
  3. спросите у кого-либо из разработчиков, может быть элемент появляеться только после определенного времени или действий со стороны пользователя?
    Если у них есть время, пусть посмотрят на запуск сайта из вашего теста - возможно, какая-то JS библиотека или файл, ответственние за отображение чат элемента не подгружаються.

ну, или если этот чат предоставлен third-party сервисом, напишите к ним в поддержку, прямо через форму этого чата - “Ребята, я не вижу элемента, мои действия следующие: …” и т.д.

Надеюсь, что вам удастся совместными усилиями решить, в чем же проблема :slight_smile:


(Vatslau) #6

похоже это как раз тот кейс - когда вместо вебдрайвера можно попробовать сикули-врайс или что-то в этом вроде

  • элементов мало
  • их изображения статичны

#7
  1. NoSuchElementException: Message: Unable to locate element:
  2. если браузер запускается вебдрайвером, то не агружается
  3. чат предоставлен third-party сервисом. Попробую связаться с ними

#8

сикули не подойдет, т.к. элемент не появляется


#9

@brutusimpuls, скажите пожалуйста - ви автоматизируете етот сайт https://chatra.io/ для себе, в целях обучения? Или же ето ваше рабочее задание?
В первом случае, тогда, уви, обойти проблему будет крайне трудно (или же невозможно - см. переписку со Службой Поддержки chatra.iо). Если второй вариант - тогда вам нужно писать к ним напрямую - не через форму поддержки, а лучше всего внутренней почтой либо связяться через Тим Лида/Продакт Овнера - они то должни бить в курсе и помочь вам.

Добавлю немного конретики - действительно, сайт настроен таким образом, что он определяет - заходит ли ето реальний человек или же робот. Если запустите ваш тест и откроете Developer Tools => Console, то увидете, что yeps.js файл определяет, что ви бот :slight_smile:

Конечно, можно поиграться из настройками браузера в тесте (например, DesiredCapabilities => CapabilityType.SUPPORTS_APPLICATION_CACHE = true, CapabilityType.SUPPORTS_JAVASCRIPT = true, и прочее), но не уверена, что вам удасться обойти ету проверку (у меня, к сожалению, не получилось).


(Сергей Слётов) #10

Плюс к выше сказанному @Lucky

@brutusimpuls, попробуйте поиграться с опциями и в других браузерах, если браузер вам не пренципиален.


#11

спасибо за ответ.
Нет это не тестовое задание, это по работе, но для другого сайта.


(Vatslau) #12

если идея верна (сам в JS не в зуб ногой)
https://edmundmartin.com/detecting-selenium/
нужно проксей перехватить скрипт
и изменить его
чтобы проверка на бота была фолс

вообще интерестная задача - жаль JS/FED не мое)

 this.frameMount = function(t) {
            Object(S.a)(e.frame.base.contentWindow).then(function() {
                Object(h.warn)("you are bot"),
                e.setState({
                    isBot: !0
                })
            }),
            e.frame.base.contentWindow.addEventListener("resize", e.throttledResize),
            e.frame.base.contentWindow.addEventListener("blur", e.handleBlur)
        }

isBot: !0 -> isBot: !1
наверно если заmенить сработает - тк будет инверсия

PS https://intoli.com/blog/making-chrome-headless-undetectable/
вот рекомендации для питона по байпасу js