суббота, 24 октября 2020 г.

Использование переменной в локаторе (XPATH).

Нужно проверить правильная ли цена отображается на сайте.

Переменная var будет разной в зависимости от продукта (или региона, например). 

Мы можем использовать данную функцию для поиска и проверки всех цен, меняется только  expected_price и var.


@allure.step("Check that price is correct")
def is_price_correct(driver, expected_price, var):
price_locator = (
By.XPATH,
'//div[@id="buySASub1"]//span[contains(@data-type, "upgrade")
         and contains(@data-tier, "'+var+'")]'
)
return is_element_price_correct(driver, expected_price, price_locator)

пятница, 23 октября 2020 г.

Как правильно переносить текст при использовании CSS-селекторов (CSS-Selector)

  def click_buy_button(driver):

    a_button_locator = (

        By.XPATH, 

        "//a[contains(@class, 'product-purchase') "

        "and contains(@href, '" + Config.ps_base_url + "')]"

    )

    a_button = Button(driver, a_button_locator)

    a_button.click()

Описание XPath с помощью Contains

 Contains примеры:


1) Класс

//a[contains(@class, 'product-formatted-price')



2) Текст


a[contains(text(),"Get")]



3) Ссылку


//a[contains(@class, 'product-purchase') and contains(@href, '" + Config.ps_base_url + "')]



4) ID


//div[contains(@id,"content")]



5) Другие (data-type...)


//span[contains(@data-type, 'no')]



6) Содержит сразу 2 условия


//span[contains(@data-type, 'no') and contains(@data-time, '0')]



7) Описать элемент, который находится внутри секции buySub1


//div[@id="buySub1"]//span[contains(@data-type, 'no') and contains(@data-tier, '0')]

четверг, 22 октября 2020 г.

Как обновить Allure, Pytest, Selenium и др. в PyCharm. Как использовать Pytest в PyCharm

Чтобы использовать Pytest для тестирования в PyCharm:

1. PyCharm - Preferences


2. Tools - Python Integrated Tools

3. В Default test runner выбираем Pytest



4. Apply - Сохраняем изменения


 Чтобы ОБНОВИТЬ пакеты программ для Python в PyCharm (Allure, Pytest, Selenium, BrowserStack Local, Pip, Cryptography, myOpenSSL, Webdriver Manager и другие):

1. PyCharm - Preferences

2. Project (там должен быть указан ваш проект) - Python Interpreter


3. В первой колонке видим все уже установленные пакеты, во второй - текущая версия пакета, в трeтьей - доступная последняя версия.
Если текущая и последняя версия не совпадают, то мы видим треугольник возле Latest Version, это означает, что мы можем ее обновить.



4. Для того, чтобы обновить пакет ставим курсор на нужную строку (в примере выше это attrs), кликаем на треугольничек внизу (выделила его на рисунке). Пакет обновится.



Установить ALLURE для Mac (Мак)

 Чтобы установить Allure (Алюр) на ваш компьютер в Терминале введите следуюший текст:




- для Mac

brew install allure

вторник, 20 октября 2020 г.

Switch to iFrame - Если нужно переключиться на frame и обратно

Например, существует иконка Помощника (Help), которая должна отображаться на всех страницах вебсайта. Пользователь может кликнуть на нее и пообщаться с Службой поддержки.

Сейчас существует много сервисов, которые позволяют использовать их инструмент для такого окна - Intercom, Helpscout, Zendesk....


АВТОТЕСТ:

- Проверить, что иконка помощника отображается на странице. 

Открываем trial_download_signup_page старницу.

Переключаемся на Frame, где эта иконка находится. Потом ищем иконку, проверяем ее видимость на странице и переключаемся обратно на исходную страницу.

Дальше нам надо еще ввести и-мейл, согласиться с условиями и кликнуть кнопку Download.

На открывшейся старницы мы тоже проверяем наличие Help иконки.


Для переключения на рамку будем использовать функцию - switch_to_frame 

Для возвращения на исходную страницу - switch_to_default_content


def test_user_should_see_help_icon_on_trial_download_signup_page(driver):
trial_download_signup_page.open(driver)
assert trial_download_signup_page.help.is_icon_displayed(driver), \
"Help icon is not displayed on Trial Download Signup page"
driver.switch_to_default_content()
trial_download_signup_page.set_email(driver, TestData.get_random_email())
trial_download_signup_page.agree_to_terms_and_policy(driver)
trial_download_signup_page.click_download_button(driver)
assert trial_download_signup_page.help.is_icon_displayed(driver), \
"Help icon is not displayed on SA Signup Follow page"

in Help file:

@allure.step("Check if Help icon is displayed on the page")
def is_icon_displayed(driver):
iframe = HtmlElement(driver, (By.CSS_SELECTOR, "selector"
]'))
iframe.
switch_to_frame()
help_icon = HtmlElement(driver, (By.CSS_SELECTOR, "selector"
]'))
return helpscout_icon.is_element_visible()

Как проверить что элемент содержит определенный класс (пример - Error class)?

 

Как проверить что элемент содержит определенный класс? Python-Selenium



Задача:

Существует форма, которую пользователь должен заполнить. В форме есть обязательные поля. Если пользователь их не заполнил, то поле подсвечивается красным цветом. За подсветку поля отвечает класс ERROR. Этот класс присваивается элементу, если поле не заполнено.

Нужно проверить содержит ли элемент этот класс. Задача усложняется тем,  что все элементы имеют не только этот один класс, а нужно проверить именно его наличие.


def test_user_should_see_warning_if_fields_are_not_filled(driver):
    support_page.open(driver)
    support_page.click_send_message_button(driver)
   assert support_page.is_name_field_has_error_class(driver), \
       "The Name field has no Error class"

@allure.step("Check that Name field has Error class when this field does not filled")
def is_name_field_has_error_class(driver):
    name_input_field = HtmlElement(driver, (By.CSS_SELECTOR, '[name="name"]'))
    return 'error' in name_input_field.get_attribute("class")

class HtmlElement:
    def __init__(self, driver, locator):
        self.driver = driver
        self.element_locator = locator

def get_attribute(self, attribute_name, timeout=30):
    wait = WebDriverWait(self.driver, timeout)
    try:
        element = wait.until(expected_conditions.presence_of_element_located(self.element_locator))
        return element.get_attribute(attribute_name)
    except TimeoutException:
        raise NoSuchElementException("Can't find element with locator " + str(self.element_locator) +
                                     " after " + str(timeout) + " seconds.")

понедельник, 19 октября 2020 г.

Как проверить, чтобы статистика передается в Facebook и Google Analytics.

 Наш сайт использует GTM (Google Tag Manager) для сбора статистики для Гугл Аналитикс (Google Analytics) и Фейсбук (Facebook). 

Чтобы проверить что сайт отправляет запрос на GA и Facebook нужно сделать следующие шаги:

1. Заходим в DevTools - Inspect

2. Выбираем Network

3. Ставим галочку Preserve Log


4. В окошко Filter вводим facebook (для Facebook проверки) или collect (для Google Analytics) после выполнения действия, которое должно быть записано в аналитику.

5. Выбираем закладку Headers

6. Ищем там Query String Parameters


7. Для Facebook ищем - ev - Pageview  or Lead or Complete Registration (это зависит от того, как ваши события названы в FB)
Для GA - t - Pageview or Event.


 Вывод - событие Event (в данном примере) передается в Гугл Аналитику.




Самые полезные ФУНКЦИИ Пайтона

 1)  PRINT - выводит на печать переменную, указанную в скобках print (average)   2)  LEN - посчитать количество элементов в списке student...