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

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

问题描述

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)

这2个功能正常工作,但是我使用的是sleep(),这是一个不好的做法,因为某些下拉列表和文本字段需要比其他字段更长的填充时间,因此我必须放置最长的睡眠值才能避免出错,如何使用wait修复这两个功能.

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.

推荐答案

WebElement 项目上调用send_keys()时,理想情况下,您应该调用 WebDriverWait ,其中 EC element_to_be_clickable,因此您必须:

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)
    

  • 由于下拉列表需要更长的时间,因此您应使用 EC 作为visibility_of_element_located调用 WebDriverWait ,因此您必须:

    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天全站免登陆