0

我想知道是否有任何方法可以让我更快地检查元素是否显示在 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)
4

1 回答 1

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 秒以使元素出现,如果是,它将断言是否显示该元素。如果该元素不存在,它将抛出一个超时异常,该异常可以以正常方式捕获,而不是破坏您的测试。

于 2013-11-07T09:03:27.780 回答