Skip to main content
 首页 » 编程设计

python之遍历列表长度并创建函数列表

2025年05月04日15jillzhang

在下面的片段中,我手动输入了两个作为 AnyEc 参数的函数。

def element_visible(context, element_id): 
    element = WebDriverWait(context.browser, 10).until(AnyEc( 
        expected_conditions.visibility_of_element_located((By.ID, element_id[0])), 
        expected_conditions.visibility_of_element_located((By.ID, element_id[1])) 
    )) 
    return element 

根据 element_id 的列表长度,我如何才能将这些参数创建为函数?

我已经尝试使用 for eaches,但一直无法生成未被解析为字符串参数的逗号分隔函数列表。

编辑: 看起来迭代函数现在正在使用建议的更新运行。不幸的是,我似乎不再获得要返回的函数。

下面是我更新的代码:

class AnyEc: 
    # Use with WebDriverWait to combine expected_conditions in an OR 
    def __init__(self, *args): 
        self.ecs = args 
 
    def __call__(self, browser): 
        for fn in self.ecs: 
            try: 
                if fn(browser): 
                    # Return element ID located and element object 
                    return [fn.locator[1], fn(browser)] 
            except: 
                pass 
 
def element_visible(context, element_id): 
    # Iterate through element_id list to provide args for AnyEc 
    args = [expected_conditions.visibility_of_element_located((By.ID, id)) for id in element_id] 
    element = WebDriverWait(context.browser, 10).until(AnyEc(*args)) 
    return element 

编辑 2: 尽管不优雅,但我目前正在使用以下代码:

def element_visible(context, element_id): 
    if isinstance(element_id, str): 
        element = WebDriverWait(context.browser, 10).until(AnyEc( 
            expected_conditions.visibility_of_element_located((By.ID, element_id)) 
        )) 
    else: 
        element = WebDriverWait(context.browser, 10).until(AnyEc( 
            expected_conditions.visibility_of_element_located((By.ID, element_id[0])), 
            expected_conditions.visibility_of_element_located((By.ID, element_id[1])) 
        )) 
    return element 

请您参考如下方法:

在列表中收集预期条件,然后 unpack the list :

conditions = [ 
    expected_conditions.visibility_of_element_located((By.ID, item)) 
    for item in element_id 
] 
element = WebDriverWait(context.browser, 10).until(AnyEc(*conditions))