1

Итак, мне нужно создать тест для проверки входа/регистрации. Я пытаюсь уловить ошибку при неправильном вводе электронной почты. Шаги: 1. Введите недействительный адрес электронной почты. 2. Нажмите кнопку «Войти». 3. Должен показать ошибку, что «неправильный пароль или адрес электронной почты».selenium python check hide error

Ниже я написал 2 функции. Как я могу объединить эту две функции? Вторая функция всегда показывает мне статус «ОК».

def test_login_user(self): 
    driver = self.driver 
    driver.get("https://courses.edx.org/login") 
    driver.find_element_by_name('email').send_keys("email24") 
    driver.find_element_by_name('password').send_keys('12345678') 
    driver.find_element_by_name('signin').click() 

def test_error(self): 
    driver = self.driver 
    driver.get('https://courses.edx.org/login') 
    error = driver.find_element_by_css_selector('div.status.submission-error') 
    if error.is_displayed(): 
     return True 
    else: 
     return False 

ответ

0

Прежде всего, вместо размещения элементов по name - переключатель id и class атрибутов - есть несколько элементов с одинаковыми именами.

Кроме того, вы должны использовать Explicit Waits, чтобы подождать, пока элементы станут видимыми.

Рабочий пример:

from selenium import webdriver 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 

driver.get("https://courses.edx.org/login") 
email = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "login-email"))) 
email.send_keys("illegal") 
driver.find_element_by_name('password').send_keys('12345678') 
driver.find_element_by_css_selector('button.login-button').click() 

try: 
    WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.status.submission-error"))) 
    print True # in your case inside a function it would be "return True" 
except TimeoutException: 
    print False # in your case inside a function it would be "return False"