使用显式等待自动完成硒

时间:2017-09-26 01:00:20

标签: python selenium selenium-webdriver

我正在尝试使用显式等待将此代码更改为某些内容:

class InputAutocompleteElement(InputElement):
    def __set__(self, obj, value):
       driver = obj.driver
       element = self.find_element(driver, self.locator)
       time.sleep(3)
       element.clear()
       time.sleep(1)
       element.send_keys(value)
       time.sleep(3)
       element.send_keys(Keys.RETURN)

我在上面的行中做的是:首先,尝试让脚本睡3秒,然后清除文本框,然后再睡一秒,然后发送字符串,然后再睡3秒,然后发送一个回车密钥,因为这是从自动完成获取名称的必要条件,不可能只输入名称,我的问题基本上是页面需要时间来发送字符串后取值,我发送的输入键太快而不是像这样工作,页面需要时间来取值,然后发送回车键。

感谢。

1 个答案:

答案 0 :(得分:0)

你可能不需要前两次睡觉。最后一次睡眠应该替换为等待自动完成下拉列表打开的显式等待。基本上,您等待与自动完成下拉列表相关联的某些元素的可见性。如果您不知道如何找到自动完成下拉列表,则必须共享指向该网站的链接或发布HTML。下面的代码应该让您了解该做什么

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

...

class InputAutocompleteElement(InputElement):
    def __set__(self, obj, value):
       driver = obj.driver
       element = self.find_element(driver, self.locator)
       element.clear()
       element.send_keys(value)
       WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "idOfAutocompleteDropdown"))
       element.send_keys(Keys.RETURN)

您可以在python docs

中找到更多信息