为什么需要很长时间来检查元素是否显示?

时间:2013-11-07 02:45:36

标签: python webdriver element displayobject

我想知道是否有任何方法可以让我检查元素是否更快地显示在UI上。 我已经比较了如果元素显示在UI上,那么我的代码将很快得到结果,而如果元素没有显示在UI上,我的代码将花费很长时间来获得结果。为什么呢?

from selenium.common.exceptions import NoSuchElementException 
from selenium import webdriver

def is_OS_Present(Des,driver):
    td_OS_section=driver.find_element_by_id("CONTROL_OS_CTO_Options")
    try :
        td_OS_section.find_element_by_xpath("//label[contains(text(),'%s')]" %Des)
        print 'ele is displayed'
    except NoSuchElementException:
        print 'ele is not displayed'

driver=webdriver.Firefox()
driver.get("https://www-01.ibm.com/products/hardware/configurator/americas/bhui/launchNI.wss")
driver.find_element_by_id("modelnumber").send_keys('5458AC1')
driver.find_element_by_name("submit").click()

is_OS_Present('RHEL Server 2 Skts 1 Guest Prem RH Support 1Yr (5731RSR) ',driver)
is_OS_Present('abc',driver)

1 个答案:

答案 0 :(得分:0)

当Webdriver尝试查找任何元素时,会将默认超时作为Webdriver的一部分。如果元素存在,显然,它不会超时。如果该元素不存在,则会超时。如果我没记错的话,超时是30秒的默认时间。

如果您想选择不同的超时期限,而不是更改可能导致其他地方出现问题的默认值,建议您使用WebdriverWait

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

self.wait = WebdriverWait(self.driver, 10)  //first parameter is your webdriver instance, second is the timeout in seconds

self.wait.until(EC.presence_of_element_located((By.ID, "id")))
assertTrue(self.find_element_by_id("id").is_displayed())

这是一个相当粗略的实现,但希望您可以看到现在Webdriver将等待10秒钟才能存在元素,如果是,它将断言是否显示该元素。如果该元素不存在,它将抛出一个超时异常,可以以正常方式捕获,而不是炸毁你的测试。