簡體   English   中英

Python-Selenium:等待元素存在然后返回 True 或 false

[英]Python-Selenium: Wait for an element to exist then return True or false

我正在嘗試創建一個函數來幫助確定某個元素是從網頁中出現還是消失。

這就是我所擁有的。

def wait_for_element_to_exist(driver, by, seconds=15, negative=False):
    wait = WebDriverWait(driver, seconds)

    # waiting for element to exist
    if not negative:
        try:
            wait.until(EC.presence_of_element_located(*by))
            return True
        except:
            return False

    #wait for element not to exist
    else:
        try:
            wait.until_not(EC.presence_of_element_located(*by))
            return True
        except:
            return False

唯一的問題是無論如何調用或元素是否存在,它總是返回 FALSE

wait_for_element_to_exist(self.driver, (By.XPATH, 'xpath'))返回False

wait_for_element_to_exist(self.driver, (By.CLASS, 'class'), negative=True)返回False

我究竟做錯了什么?

您遇到的問題是您對 Presence_of_element_located(*by) 的調用

它拋出一個 TypeError,因為 *by 解包成兩個元素,這比它預期的多一個。 *by更改為by

一旦你這樣做了,如果你在這個頁面上說,

wait_for_element_to_exist(browser, (By.ID, 'question-header'))

它返回真

wait_for_element_to_exist(browser, (By.ID, 'timeout-header'))返回 False。

我建議在說之后將您的except更改為except TimeoutException

from selenium.common.exceptions import TimeoutException

當我寫過類似的函數時,我將 locate 方法和關聯的字符串作為單獨的參數傳遞,這樣可能更容易閱讀和調試。

我認為您的代碼出錯了,因為您使用的是 try except 塊。 如果 Selenium 沒有找到該元素,我認為它沒有找到錯誤——它只返回 None。

所以在我過去為這個問題編寫的類似代碼中,我做了這樣的事情:

element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.TAG_NAME, "h2"))
        )

if element:
    return True
else:
    return False

因此應用於您的代碼,如下所示:

def wait_for_element_to_exist(driver, by, seconds=15, negative=False):
    wait = WebDriverWait(driver, seconds)

    # waiting for element to exist
    if not negative:
        wait_result = wait.until(EC.presence_of_element_located(*by))
        if wait_result:
            return True
        else:
            return False

    #wait for element not to exist
    else:
        wait_result = wait.until_not(EC.presence_of_element_located(*by))
        if wait_result:
            return True
        else:
            return False

希望有效嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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