簡體   English   中英

有沒有一種方法可以使用Python / Selenium Webdriver來確認網頁上是否存在jQuery?

[英]Is there a way to confirm that jQuery is present on a webpage using Python/Selenium Webdriver?

我們有一個利用Selenium Webdriver(用Python編寫)的自行開發的自動化測試框架。 它使用地圖將對象名稱鏈接到網頁中的標識符。 不幸的是,我們似乎遇到了一個問題,即我們等待的時間不夠長,無法完成AJAX調用(我們正在解決一些性能問題)。

現在,由於有stackoverflow和其他互聯網資源,我發現了以下代碼段:

在決定與對象交互之前將其插入框架

    try:
    WebDriverWait(driver, 5).until(ajax_complete, "Ajax check waited 5 seconds")
except TimeoutException:
    logger1.info("Warning: waited 5 seconds)

這是ajax_complete的代碼:

def ajax_complete(driver):
try:
    return 0 == driver.execute_script("return jQuery.active")
except WebDriverException:
    pass

問題是某些頁面(登錄屏幕)沒有jQuery,所以我總是陷入TimeoutException。 我知道,目前最上面的代碼段將在5秒后超時並顯示一條日志消息,但是由於我們的性能問題,我需要將其更改為60秒。 這意味着在等待Ajax檢查超時時,登錄頁面將有3分鍾的等待時間(用於輸入用戶名的時間為1分鍾,用於輸入密碼的時間為1分鍾,按下登錄按鈕的時間為1分鍾),因為jQuery僅不存在這一頁。

在執行WebDriverWait檢查之前,我是否可以尋找一些東西來確認jQuery是否確實存在於網頁上? 做一些腳本元素檢查就足夠了嗎?

喜歡:

if driver.find_element_by_tagname("<script>")

如果返回True,則頁面上有一個腳本-不一定是jQuery,但是它會更接近,也許可以使用更具體的find_element_by。 困難的部分是我試圖檢查是否定的(jQuery不存在)。

您可以檢查jQuery “ global”是否通過腳本定義:

is_jquery_present = driver.execute_script("return (typeof jQuery != 'undefined');")

盡管這需要進行測試,因為頁面加載jQuery本身也需要時間。

尋找特定的script可能適用於某些頁面,但是無法保證“導入” jquery庫的方式,因為,例如,至少,JS源可以打包和壓縮。

您也可以選擇使支票短路。

return 0 == driver.execute_script("return (jQuery || {}).active")

如果jQuest不存在,它將使用一個空對象,其中的active對象將不在其中。

或者,如果您不希望使用jQuery,則希望它為true

return 0 == driver.execute_script("return (jQuery || { active: 0 }).active")

暫無
暫無

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

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