重寫查詢元素的方法加入顯式等待

2021-10-06 19:30:15 字數 1416 閱讀 4768

from selenium.webdriver.support.ui import webdriverwait

from selenium.common.exceptions import nosuchelementexception, timeoutexception

from selenium import webdriver

class base(object):

def __init__(self):

self.driver = webdriver.chrome()

self.driver.maximize_window()

def find_element(self, by, locator, timeout=30):

""":param by: 定位方式 eg:by.id

:param locator: 定位表示式

:param timeout: 顯式等待的超時時間

:return:

"""try:

element = webdriverwait(self.driver, timeout).until(lambda driver: driver.find_element(by, locator))

# webdriverwait(self.driver, timeout, 0.5).until(ec.visibility_of_element_located(by, locator))

except(nosuchelementexception, timeoutexception) as e:

raise e

else:

return element

def find_elements(self, by, locator, timeout=30):

""":param by: 定位方法eg:by.id

:param locator: 定位表示式

:param timeout: 顯式等待超時時間

:return:

"""try:

elements = webdriverwait(self.driver, timeout).until(lambda driver: driver.find_elements(by, locator))

# webdriverwait(self.driver, timeout, 0.5).until(ec.visibility_of_element_located(by, locator))

except(nosuchelementexception, timeoutexception) as e:

raise e

else:

return elements

使用find_elements和find_element 會有加入顯式等待的效果 比一般的強制等待sleep的用法好用,會提高指令碼執行的速度。

專案實戰 使用顯式等待無法處理的情況

selenium裡有三種等待方式 隱式等待 載入完瀏覽器開始呼叫,作用域是當前控制代碼的全域性 dr.implicitly wait 20 強制等待 建議少用,非必須不用 import time time.sleep 3 強制等待3秒 顯式等待 建議使用,但有時候作用並不大 webdriverwai...

等待頁面某元素載入完成的方法

一 先在allocationcommon中寫個方法 等待頁面某元素載入完成 引數 type元素定位型別 by該型別對應的定位值 public static void load string type,string by else if id equals type else if name equa...

dll檔案的隱式呼叫和顯式呼叫(方法示例)

隱式呼叫 隱式呼叫有兩種方法 1 需要dll檔案 lib檔案和標頭檔案 示例 declspec dllimport int add int a,int b declspec dllimport int subtract int a,int b 匯出乙個c 類 class declspec dllim...