栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过Selenium和WebDriver等待JavaScript __doPostBack调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过Selenium和WebDriver等待JavaScript __doPostBack调用

我发现,处理这些JS最简单的方法

postbacks
,就是等待受影响的元素 负载陈旧 或无法找到。

这是一个示例函数:

def waitForElementRemoved(Element, WaitCount, WaitTime):    ElementRemoved = False    WaitTry = 0    while not ElementRemoved:        try: if WaitTry > WaitCount:     raise Exception("Element not removed from page in alloted time") Test = Element.text WaitTry += 1 time.sleep(WaitTime)        except (NoSuchElementException, StaleElementReferenceException): ElementRemoved = True

然后,我将选择一个受此影响的元素,

postback load
并将其与一些计时参数一起传递给函数。

如:

driver = webdriver.Firefox()driver.get("https://www.avis.co.in")removedElement = driver.find_element_by_id("DrpCity")mySelect = Select(driver.find_element_by_id("DrpCity"))mySelect.select_by_visible_text("Pune")waitForElementRemoved(removedElement, 10, .5)WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='txtPickUp']"))).send_keys("XYZ")

我不知道这是否是处理Javascript 事件的 最佳 方法

onchange load
,但就我而言,它非常有效。


为了补充这个答案 :我发现在有多个加载事件时, 等到元素变旧
并不总是有效,我发现使用该方法以及下面的代码可以更有效地确保这些动态加载事件已完成:(我改编了
HERE的以下代码)

# Wait for AJAX (Jquery or JS) dynamic page load eventsclass DynamicLoadState:    def __call__(self, driver):        LoadComplete = False        JQueryLoadComplete = False        JSLoadComplete = False        try: if driver.execute_script("return jQuery.active") == 0: JQueryLoadComplete = True        except Exception: # JQuery is not present on page JQueryLoadComplete = True        if driver.execute_script("return document.readyState") == 'complete': JSLoadComplete = True        if JQueryLoadComplete and JSLoadComplete: LoadComplete = True        return LoadCompletedef WaitForDynamicLoad(driver, WaitTime):    WebDriverWait(driver, WaitTime).until(DynamicLoadState())# Use the first method of waiting for the element to go stale# then run this to make sure all loading is completedWaitForDynamicLoad(driver, Counts.WaitTime)

希望这有助于防止

time.sleep()
将来有人使用页面加载!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号