Selenium Python遍历Web表列,在条件为True后停止,如果条件为False则引发错误

时间:2019-07-17 23:06:51

标签: python selenium for-loop assert

我试图验证是否在HTML表格的某些列中填充了数据值(包括美元和美分金额)。我编写了一个Selenium Python脚本,该脚本使用For循环遍历HTML表。我在For循环中添加了IF / ELSE,以检查是否在表的列中的任何文本中找到小数点。如果找到带小数点的值,则将变量“ values_filled”设置为True(否则,则将“ values_filled”设置为False)。我的想法是,如果找到一个带小数点的值,则该列将成功地用美元和美分值填充。如果未找到小数点,则表示该列未填充,这将触发“失败”。

我成功编写的代码遍历HTML表的行和列。此外,如果存在带小数点的值,则IF / ELSE部分正确标记“ values_filled” = True,如果未找到任何值,则values_filled = False。最后,我有一个TRY / EXCEPT部分,如果values_filled为“ False”,则抛出异常。

接下来我要做的是,当找到“ values_filled” = True的第一个实例时,我想结束循环。但是,即使values_filled值为true,循环也会继续。

account_balances_table = driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div/ui-view/div/div/div/div[4]/div[1]/table")
rows = account_balances_table.find_elements(By.TAG_NAME, "tr")
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")
    for col in cols:
        text_found = cols[1].text
        if ("." in text_found):
            values_filled = True
            if values_filled == True:
                break
            else:
                continue
        else:
            values_filled = False

        try:
            assert values_filled is True
        except AssertionError:
            screenshot_name = "FAIL" + "_" + test_case_ID + "_" + browser + "_" + env + "_" + time_stamp + ".png"
            saved_screenshot_location = str(screenshot_directory / screenshot_name)
            driver.get_screenshot_as_file(saved_screenshot_location)
            raise

我遇到的问题是,即使values_filled为“ true”,For循环仍会继续。我插入了一个中断,但是循环没有停止。这是一个问题,因为脚本会继续运行并错误地标记其他单元格中找到的空白值的异常。我希望在找到values_filled = true的第一个实例后结束循环。

1 个答案:

答案 0 :(得分:0)

发布有效的解决方案。

account_balances_table = driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div/ui-view/div/div/div/div[4]/div[1]/table")
rows = account_balances_table.find_elements(By.TAG_NAME, "tr")
values_filled = False
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")
    for col in cols:
        text_found = cols[1].text
        if ("." in text_found):
            values_filled = True
            break

        try:
            assert values_filled is True
        except AssertionError:
            screenshot_name = "FAIL" + "_" + test_case_ID + "_" + browser + "_" + env + "_" + time_stamp + ".png"
            saved_screenshot_location = str(screenshot_directory / screenshot_name)
            driver.get_screenshot_as_file(saved_screenshot_location)
            raise