![](/img/trans.png)
[英]Wait until page is loaded with Selenium WebDriver for Python
[英]python selenium: does not wait until page is loaded after a click() command
有人知道如何等到頁面加載? 我嘗試了我在網上找到的所有可能的變種但是根本不起作用。
我需要在觸發click()命令后等待,在Web服務器上有一些內部腳本,這些腳本會欺騙檢查(例如,我排除導入所需模塊的代碼並使用標准命名約定):
WebDriverWait(browser, 10).until(lambda d: d.find_element_by_id(the_id))
要么
browser.implicitly_wait(10)
要么
elem2=wait.until(EC.presence_of_element_located((By.ID,the_id)))
所有上述檢查都不起作用,即使頁面仍在加載,它們也會返回True。 這會導致我正在閱讀的文本不完整,因為在click()命令之后頁面未完全加載。 似乎在python中命令clickAndWait不可用(但同樣,它可能無法解決問題,因為其他測試也失敗)。 理想情況下,會有一個命令等待整個網頁加載(無論頁面的特定元素如何)。
我設法通過在循環中手動插入time.sleep(5)來解決問題,但這是次優的,因為它可能會減慢整個過程。 如果可能的話,最好只等待嚴格要求的時間。
謝謝
從根本上說,如果頁面是由JavaScript生成的,那么就沒有辦法告訴它什么時候“完成”加載。
然而。 我通常嘗試檢索頁面元素,捕獲異常並繼續嘗試,直到達到超時。 我也可能會檢查元素是否可見而不僅僅是存在。
必須有一些DOM元素,其可見性可用於測試頁面是否已“完成”加載。 我通常在我的測試用例中有wait_for_element_visibility
和wait_for_element_presence
函數。
def wait_for_visibility(self, selector, timeout_seconds=10):
retries = timeout_seconds
while retries:
try:
element = self.get_via_css(selector)
if element.is_displayed():
return element
except (exceptions.NoSuchElementException,
exceptions.StaleElementReferenceException):
if retries <= 0:
raise
else:
pass
retries = retries - 1
time.sleep(pause_interval)
raise exceptions.ElementNotVisibleException(
"Element %s not visible despite waiting for %s seconds" % (
selector, timeout_seconds)
)
get_via_css
是我自己的功能之一,但我希望它能夠做得很清楚。
這是我用過的版本:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def waitForLoad(inputXPath):
Wait = WebDriverWait(browser, PATIENCE_TIME)
Wait.until(EC.presence_of_element_located((By.XPATH, inputXPath)))
函數的第一行是通用等待。 第二個是預期條件,它試圖找到您知道在頁面上存在的元素。 您可以更改它,而不是Xpath,它會執行CSS_SELECTOR,NAME,ID,CLASS等等。還有很多其他的,但您必須查找預期的條件文檔。 希望有所幫助,當我弄清楚時,它幫助了我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.