Ответы пользователя по тегу Selenium
  • Как залогинится на сайт с помощью Python Selenium, сайт каждый раз меняет id, name, xpath, selector?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Судя по коду фронта, этот сайт работает на Wt, а потому сам занимается маппингом id/name для элементов формы, прегенерируя их на бэкенде. Вам необходимо искать по классам, по такому принципу:
    //div[contains(@class, 'loginWindow')]//input[contains(@class, 'line-height-wide')][1]

    Обратите внимание, что используется предикатная функция contains, т.е. ищет подстроку и могут появиться лишние совпадения, вроде loginWindow__title. Есть еще функции starts-with и ends-with и остальные, не менее полезные штуки. Гуглите в сторону XPath. Два слэша означает: "где-то среди детей на любой глубине"

    Я напишу на C#, вы адаптируйте под свой питон:

    const string loginFormPath = "//div[contains(@class, 'loginWindow')]";
    const string inputFieldSelector = "input[contains(@class, 'line-height-wide')]";
    
    const string nameFieldPath = loginFormPath + "//" + inputFieldSelector + "[1]";
    const string passwordFieldPath = loginFormPath + "//" + inputFieldSelector + "[2]";


    Либо аналогичное с CSS-селекторами
    const string loginFormPath = ".loginWindow";
    const string inputFieldSelector = "input.line-height-wide";
    
    const string nameFieldPath = loginFormPath + " " + inputFieldSelector + ":nth-child(1)";
    const string passwordFieldPath = loginFormPath + " " + inputFieldSelector + ":nth-child(2)";


    ЗЫ Самая популярная новичковая проблема: если когда-нибудь в процессе работы встретите iframe, то на него необходимо явно переключиться, селекторы через эту границу работать не будут.
    Ответ написан
    Комментировать
  • Как правильно использовать инкапсуляцию в Page Object паттерне?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    инкапсуляция доходит до абсурда, и придется писать геттеры под каждый элемент или методы вроде addToCartButtonClick().


    Поддерживать ООП с SOLID и прочими DRY - это вообще не особо удобно, а что поделать?)

    Другое дело, что вместо addToCartButtonClick должен быть метод addProductToChart, где PageObject уже решит, что ему нужно: кнопку нажать, ползунок потянуть и т.п., тогда это можно будет назвать инкапсуляцией и пропадёт абсурдность.

    Если вам не нужны геттеры под каждый элемент, то делайте их private. Очевидно, что хороший ООП-код старается в классе как можно больше скрыть, сделать статическим и константным, а пользователю выставить лишь необходимое и достаточное для решения его задач
    Ответ написан
    Комментировать
  • Как на Selenium заполняя поле определить прошло ли верификацию?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    driver.wait(function() {
        return driver.findElement(locator).isDisplayed();
    }, timeout);


    Где locator - это критерий поиска, в вашем случае, по CSS-классу.
    Ответ написан
  • Как начать тестирование сайта?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Selenium - на базе обычных юнит-тестов, с ассертами ("сколько пальцев видишь?", "на месте ли кнопка?"). Они медленные, поэтому гонять оптимально ночью, вместе с интеграционными (API, сложные сценарии с данными). Они интеграционные, поэтому покрывать нужно реальные сценарии, т.е. функциональные блоки. У нас, например, тестировщики пишут тест-кейсы (текст вида: "Пойди туда - получишь то."), а по ним программируются автотесты, т.е. точно так, как бы проверял человек. Неплохо бы помимо логов при падении делать скриншоты.
    Чем больше покрытие - тем лучше, хотя нужно как-то балансировать, чтобы не чинить их 50% времени от разработки новой фичи =)

    Юнит тесты гонять каждый коммит (в маленьком проекте можно руками перед коммитом, а в большом - силами CI после каждого коммита).
    Ответ написан
    5 комментариев
  • Каким образом приложение на С# для автотестов (Selenium) развернуть в интернете?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Зачем "размещать в интернете" тесты? Обычно тестами заведует CI, который лежит там, где пакеты собираются (с целью проверить, что очередной коммит ничего не сломал по "эффекту бабочки").

    Но, так или иначе, если сайт публичен, то размещаться тестовый проект может где угодно и представлять из себя что угодно, хоть консольное приложение (никакой ASP.NET вам не нужен, ибо Selenium WebDriver управляет браузером, а не самим приложением). Но чтобы автоматизировать инфраструктуру, удобнее пользоваться специальным тестовым типом проекта.
    Ответ написан
  • Есть ли уроки по Selenium Web Driver ASP.NET MVC?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Недавно в это погружался)

    Ничего лучше этого не нашел. Но этого, официального референса и пары уже имеющихся тестов хватило, чтобы разобраться. На пару вечеров экспериментов.
    Ответ написан
    1 комментарий