使用Python控制Selenium - 无法使用‘等待’
我们维护一个库,这个库是用来测试脚本的,主要进行系统级别的测试。被测试的系统中有一个网站,我们通过JPype来控制Selenium 2.0的webdriver,以便在网站上进行导航和交互。Selenium 2.0有Java和C#的接口,但目前我们无法用Java或C#重写我们的测试库,所以才使用JPype来控制它。这个系统是之前一位离职的同事搭建的,我现在正在学习这个系统。
每次我们与网站互动时,都会使用time.sleep:
self.browserDict['Driver'].findElement(self.browserDict['By'].id(byId)).click()
time.sleep(_AJAX_TIMEOUT)
>>> self.browserDict['Driver']
<jpype._jclass.org.openqa.selenium.firefox.FirefoxDriver object at 0x0626DD30>
>>> byId
'login_submit'
每当我们点击某个东西时,都会有一个time.sleep()来等待下一页加载。我们使用了很多AJAX,但似乎应该有办法等待AJAX加载完成。在他离开之前,这个工具的作者解释过,JPype或Selenium中存在一个问题,导致无法做到这一点。目前我找不到这个问题,但我也不知道在这里应该使用哪个等待命令。
编辑:
一个选择是使用implicitlyWait,假设如果超时时间设置为6秒,那么在找到元素后应该立即返回,但似乎在加载页面时总是会等待完整的6秒。
编辑2:
Python绑定现在已经直接支持Selenium 2.0了,不过似乎在这个库中也没有办法等待AJAX加载完成:time.sleep(0.2) # 让页面加载,这将被添加到AP
(来自他们的示例)。
2 个回答
0
也许你可以看看这个链接 http://wiki.openqa.org/display/SEL/waitForCondition,它可能符合你的要求?
0
通过JPype和Java绑定的隐式等待是可以用的,能够满足这里的需求。