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

时间:2015-08-03 19:52:51

标签: python python-2.7 selenium selenium-webdriver webdriver

我有一个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

基本上,代码存储表格和元素中的元素数量。然后检查元素的数量是否大于3.如果是,则增加计数直到它达到“5”。并停止。 print语句用于调试。

出于某种原因,“如果'尽管计数等于' 2'

,但声明仍然保持为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

正如您所看到的,重视&#39; numberOfActiveConfigs&#39;属于&#39; int&#39;,所以这不是我将字符串与int进行比较的情况。我不知道为什么会发生这种情况。我觉得这对我来说是一个愚蠢的错误。

2 个答案:

答案 0 :(得分:2)

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

替换

for cnt in range (0, 5):

cnt = o
while cnt < 5:
    {body}

答案 1 :(得分:2)

  

我确保在我之前桌子已经至少部分装满了   继续我的测试。我需要列出至少3个对象   表格确认了我正在进行的测试。这有助于我在运行时   在速度慢得多的机器上进行相同的测试。

您不必手动执行此操作。 Selenium具有Explicit Wait功能内置。基本上,你提供一个可调用的,每隔500毫秒执行一次(默认情况下),直到callable的计算结果为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个或更多选项出现,每500ms检查一次,但最多10秒。如果在10秒内不满足条件,您将获得TimeoutException