我有一个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进行比较的情况。我不知道为什么会发生这种情况。我觉得这对我来说是一个愚蠢的错误。
答案 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
。