如何摆脱硬编码的 sleep()? [英] How to get rid of the hardcoded sleep()?

查看:38
本文介绍了如何摆脱硬编码的 sleep()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

def textfield(boxid,textAdded):项目 = driver.find_element_by_id(boxid)project.send_keys(文本添加)睡觉(3)def dropdown(dropdownid, dropdownvalue):选择 = 选择(driver.find_element_by_id(dropdownid))select.select_by_visible_text(下拉值)睡觉(5)

这 2 个函数是有功能的,但是我使用的是 sleep() 这是一个不好的做法,因为我的一些下拉菜单和文本字段需要比其他人更长的时间来填充所以我必须把最长睡眠值不会出错,我如何使用等待修复这两个函数.

解决方案

当您在 WebElement 项目 上调用 send_keys() 时,理想情况下,您应该使用 EC 作为 element_to_be_clickable 调用 WebDriverWait,因此您必须:

  • 替换:

    def textfield(boxid,textAdded):项目 = driver.find_element_by_id(boxid)project.send_keys(文本添加)睡觉(3)

  • 与:

    def textfield(boxid,textAdded):WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "boxid"))).send_keys(textAdded)

由于下拉菜单需要更长的时间来填充,因此您应该使用 EC 作为 visibility_of_element_located 调用 WebDriverWait,因此您必须:

  • 替换:

    def dropdown(dropdownid, dropdownvalue):选择 = 选择(driver.find_element_by_id(dropdownid))select.select_by_visible_text(下拉值)睡觉(5)

  • 与:

    def dropdown(dropdownid, dropdownvalue):select = Select(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, "dropdownid"))))select.select_by_visible_text(下拉值)

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import By从 selenium.webdriver.support 导入 expected_conditions 作为 EC

def textfield(boxid,textadded):
    project = driver.find_element_by_id(boxid)
    project.send_keys(textadded)
    sleep(3)

def dropdown(dropdownid, dropdownvalue):
    select = Select(driver.find_element_by_id(dropdownid))
    select.select_by_visible_text(dropdownvalue)
    sleep(5)

These 2 functions are functional however i'm using sleep() which is a bad practice since some my drop-downs and text fields will take longer than others to fill so i have to put the longest sleep value not to get errors, how can i fix these 2 functions using wait.

解决方案

As you are invoking send_keys() on the WebElement project, ideally you should invoke WebDriverWait with EC as element_to_be_clickable, so you have to:

  • Replace:

    def textfield(boxid,textadded):
        project = driver.find_element_by_id(boxid)
        project.send_keys(textadded)
        sleep(3)
    

  • with:

    def textfield(boxid,textadded):
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "boxid"))).send_keys(textadded)
    

As the drop-down take longer to fill so you should invoke WebDriverWait with EC as visibility_of_element_located, so you have to:

  • Replace:

    def dropdown(dropdownid, dropdownvalue):
        select = Select(driver.find_element_by_id(dropdownid))
        select.select_by_visible_text(dropdownvalue)
        sleep(5)
    

  • with:

    def dropdown(dropdownid, dropdownvalue):
        select = Select(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, "dropdownid"))))
        select.select_by_visible_text(dropdownvalue)
    

Note : You have to add the following imports :

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

这篇关于如何摆脱硬编码的 sleep()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆