How to enter login credentials on form using Selenium

Viewed 541

I'm having difficulty sending login credentials to a form by selecting the 'class' elements. I get the 'Unable to locate element' error when running the code below. Not sure what to look for in the HTML code

'''

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(r"C:\Users\aigag\Documents\Python Projects\chromedriver.exe")
driver.get("https://www.goodlifefitness.com/home.html")

login = driver.find_element_by_class_name("c-header__login-text")
login.click()
time.sleep(1)

driver.switch_to_frame('destination_publishing_iframe_goodlifefitness_0')

loginemail = driver.find_element_by_class_name('c-field__input js-login-email c-login-block__input')
loginpass = driver.find_element_by_class_name("c-field__input js-login-password c-login-block__input")
time.sleep(2)

loginemail.send_keys('@gmail.com')

time.sleep(5)
driver.close()

'''

HTML code '''

<input type="email" placeholder="Enter Member ID, barcode or email address" class="c-field__input js-login-email c-login-block__input">

'''

2 Answers

If you want to access an element with more than one class name, put a period, not a space, between the class names. For example:

loginemail = browser.find_element_by_class_name('c-field__input.js-login-email.c-login-block__input')

Replace spaces with dots. As well as add webdriver waits for page loading and remove time.sleep(). As well as removing the iframe since it wasn't inside.

driver.get("https://www.goodlifefitness.com/home.html")
wait = WebDriverWait(driver, 10)
login = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "c-header__login-text")))
login.click()
loginemail = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "c-field__input.js-login-email.c-login-block__input")))
loginpass = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "c-field__input.js-login-password.c-login-block__input")))
loginemail.send_keys('@gmail.com')

Import

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