找到元素后中断For循环

时间:2020-01-19 18:38:00

标签: python selenium selenium-webdriver

我正在搜索并在弹出窗口中选择特定用户。然而,当选择了用户时,窗口会自动关闭,并且打破了循环,并给我一个错误。寻找一种在选择用户后突破两个For循环的方法。任何帮助将不胜感激。

这是我的代码

table_id = driver.find_element_by_xpath("//table[@class='list']")
rows = table_id.find_elements(By.TAG_NAME, "tr")
for row in rows:
    for col in row.find_elements(By.TAG_NAME, "th"):
        if col.text.startswith("UserTest") :
            col.click()
            break

UserTest选择后,默认情况下关闭弹出窗口。尽管,For循环仍在运行并尝试运行下一个迭代,这会引发错误

NoSuchWindowException: Message: no such window: window was already closed

2 个答案:

答案 0 :(得分:4)

您的break当前正在做的只是退出内部for循环,而不是外部循环。

因此,您可以做的是将整个迭代代码包装在一个函数中,然后使用return退出整个函数。

# <-- snip -->
def loop(rows):
    for row in rows:
        for col in row.find_elements(By.TAG_NAME, "th"):
            if col.text.startswith("UserTest"):
                col.click()
                return
# <-- snip -->

答案 1 :(得分:2)

您的break离开最近的loop,还有一个父母。最重要的是,无需使用循环即可按文本获取元素。您可以使用下面的xpath单击带有 UserTest 文本的表标题。

driver.find_element_by_xpath("//table[@class='list']//th[starts-with(.,'UserTest')]").click()