Python Webdriver:If-And 语句不适用于数值

Python Webdriver : If-And Statement Not Working With Numeric Values

我的 IF-AND 语句运行不正常。这发生在 Python 2.7.9.

    numberOfActiveConfigs = len(driver.find_elements_by_xpath("//select[@id='active_config']/option"))
    for cnt in range (0, 5):
        print "Count: ", cnt
        temp = len(driver.find_elements_by_xpath("//select[@id='active_config']/option"))
        print type(numberOfActiveConfigs)
        if numberOfActiveConfigs > 3:
            cnt = cnt + 1
        else:
            numberOfActiveConfigs = temp
            cnt = 0
    print "Number of Configs: ", numberOfActiveConfigs

基本上,代码将元素数存储在 table 中,然后检查元素数是否大于 3。如果是,则递增计数直到达到“5”并停止。打印语句用于调试。

出于某种原因,尽管计数等于“2”,'if' 语句仍返回 TRUE。

Print out:
Count:  0
<type 'int'>
Count:  1
<type 'int'>
Count:  2
<type 'int'>
Count:  3
<type 'int'>
Count:  4
<type 'int'>
Number of Configs:  2

正如您还看到的,值 'numberOfActiveConfigs' 的类型为 'int',因此这不是我将字符串与 int 进行比较的情况。我不知道为什么会发生这种情况并且感觉这对我来说将是一个愚蠢的错误。

在我看来你正在使用一个 for 循环,你想要一个 while 循环,因为 for 循环在 0:5 的范围内进行,但你试图在内部改变它 (cnt = cnt + 1) 例如。使用 while 循环,您可以最初设置它 (cnt = 0),然后 while cnt < 5 遍历主体。我认为这将解决您的问题。抱歉措辞不当。

替换

for cnt in range (0, 5):

cnt = o
while cnt < 5:
    {body}

I'm making sure the table has been at least partially loaded before I continue with my testing. I need at least 3 objects to be listed in the table to confirm a test I'm doing. This helps me when running the same test on a much slower machine.

您不必手动完成。 Selenium 具有 Explicit Wait 功能 内置 。基本上,您提供一个可调用函数,它将每 500 毫秒(默认情况下)执行一次,直到可调用函数的计算结果为 True,但最多为您配置的 M 秒。

在您的情况下,您需要 custom Expected Condition 来等待超过 N 个元素出现:

from selenium.webdriver.support import expected_conditions as EC

class wait_for_n_elements(object):
    def __init__(self, locator, count_):
        self.locator = locator
        self.count = count_

    def __call__(self, driver):
        try:
            elements = EC._find_elements(driver, self.locator)
            return len(elements) >= self.count
        except StaleElementReferenceException:
            return False

用法:

from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait    

wait = WebDriverWait(driver, 10)
wait.until(wait_for_n_elements((By.XPATH, "//select[@id='active_config']/option"), 3))

在这里,我们告诉 selenium 等待 3 个或更多选项出现,每 500 毫秒检查一次条件,但最多 10 秒。如果在 10 秒内不满足条件,您将得到 TimeoutException.