Selenium wait.until检查ajax请求完成是否抛出错误 [英] Selenium wait.until to check ajax request finished is throw error

查看:462
本文介绍了Selenium wait.until检查ajax请求完成是否抛出错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


在带有Python的Selenium Webdriver中,我想等待Ajax请求完成(jquery库).我使用Selenium的wait.until()函数.单击submitJquery按钮后,Ajax请求开始.


in selenium Webdriver with Python, i want to wait for an Ajax request to completed(jquery library). i use wait.until() function of Selenium. Ajax request is start after click on submitJquery button.

wait.until(self.driver.execute_script("return jQuery.active == 0"))

但是我遇到以下错误:

E
======================================================================
ERROR: test_MahsumAkbasNet_Pass (__main__.TestClass)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\xxx\src\unittestpackage\JavaScriptExec.py", line 24, in test_MahsumAkbasNet_Pass
    wait.until(self.driver.execute_script("return jQuery.active == 0"))
  File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.py", line 66, in until
    value = method(self._driver)
TypeError: 'bool' object is not callable

----------------------------------------------------------------------
Ran 1 test in 14.449s

FAILED (errors=1)

完整的代码是:

# -*- coding: UTF-8 -*-
import unittest
import time
import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class TestClass(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.set_page_load_timeout(30)
        self.driver.maximize_window()

    def test_MahsumAkbasNet_Pass(self):
        wait = WebDriverWait(self.driver, 30)

        self.driver.get("http://www.mahsumakbas.net/selenium")

        self.driver.find_element_by_id("submitJquery").click()     

        wait.until(self.driver.execute_script("return jQuery.active == 0"))

        print "Jquery is completed"

    def tearDown(self):
        self.driver.close()

if __name__ == '__main__':
    unittest.main()

谢谢.

推荐答案

您需要将可调用传递给wait.until():

wait.until(lambda driver: driver.execute_script("return jQuery.active == 0"))

这篇关于Selenium wait.until检查ajax请求完成是否抛出错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆