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 の一部としてデフォルトのタイムアウトがあります。要素が存在する場合、明らかに、タイムアウトしません。要素が存在しない場合、タイムアウトします。私の記憶が正しければ、タイムアウトはデフォルトで 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 に答える