我想知道是否有任何方法可以让我检查元素是否更快地显示在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)
答案 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秒钟才能存在元素,如果是,它将断言是否显示该元素。如果该元素不存在,它将抛出一个超时异常,可以以正常方式捕获,而不是炸毁你的测试。