使用显式等待自动完成selenium

2024-04-18 08:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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秒钟,然后发送一个enter键,因为这是从自动完成中获取名称的强制要求,不可能只键入名称,我的问题基本上是在发送字符串后,page需要时间来获取值,而我发送enter键的速度太快,并且不能像这样工作,页面需要时间来获取值,然后发送enter键。在

谢谢。在


Tags: 字符串代码self名称sendobjtimevalue
1条回答
网友
1楼 · 发布于 2024-04-18 08:27:14

你可能不需要前两个睡眠。最后一次睡眠应该替换为等待自动完成下拉菜单打开的显式等待。基本上,您需要等待与autocomplete下拉列表相关联的某些元素的可见性。如果你不知道如何找到“自动完成”下拉列表,你必须共享一个指向该站点的链接或发布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中找到更多信息

相关问题 更多 >