如何为python函数定义send_keys?

时间:2019-06-20 12:27:29

标签: python selenium selenium-webdriver webdriver webdriverwait

我需要有关如何调用send_keys进行用户输入的建议。如果我为行self.browser.find_elements_by_id ("Login1_UserName")分配了一个变量,然后将其发送到send_keys,则解决方案将不起作用。我在做什么错了?

 def login(Self):
     # login to the app
     username = self.browser.find_elements_by_id ("Login1_UserName")
     username.send_keys ("userone")

2 个答案:

答案 0 :(得分:1)

find_elements_*将返回 List ,并且您不能在 List 上调用send_keys()。因此,您需要将find_elements_*替换为 find_element_* ,然后可以使用以下Locator Strategies

def login(Self):
    # login to the app
    self.browser.find_element_by_id("Login1_UserName").send_keys("userone")

按照最佳做法,在调用send_keys()时,您需要为element_to_be_clickable()引入 WebDriverWait ,并且可以使用以下任一解决方案:

  • 使用ID

    WebDriverWait(self.browser, 20).until(EC.element_to_be_clickable((By.ID, "Login1_UserName"))).send_keys("Tomasito")
    
  • 使用CSS_SELECTOR

    WebDriverWait(self.browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#Login1_UserName"))).send_keys("Tomasito")
    
  • 使用XPATH

    WebDriverWait(self.browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='Login1_UserName']"))).send_keys("Tomasito")
    
  • 注意:您必须添加以下导入:

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

答案 1 :(得分:0)

这是因为您使用了find_elements_by_id("Login1_UserName"),它将返回list而不是元素。您应该使用find_element_by_id("Login1_UserName")

def login(Self):
     # login to the app
     username = self.browser.find_element_by_id("Login1_UserName")
     username.send_keys("userone")

尝试使用此代码,看看是否行得通。

from selenium import webdriver
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.Chrome("path of chrome driver")
driver.get('url')
username=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID,'Login1_UserName')))
username.send_keys("userone")