簡體   English   中英

python selenium:不等到click()命令后加載頁面

[英]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_visibilitywait_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM