我们维护一个由测试脚本使用的库,用于进行系统级测试。被测系统的一部分是一个网站,为了导航和与网站互动,我们使用JPype来控制Selenium 2.0的webdriver。 Selenium 2.0具有Java和C#接口,目前我们不能使用Java或C#重写测试库,这就是我们使用JPype来控制它的原因。这个系统是由最近离开公司的人建造的,现在我正在加快速度。
每当我们与网站互动时,我们都在使用time.sleeps:
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存在一个问题,可以防止这种情况发生。到目前为止,我找不到这个问题,但我也不知道将在这里使用的wait命令。
修改
一种选择是使用implicitlyWait,假设如果超时是6秒,它会在找到一个元素后立即返回,但是在加载页面时似乎总是等待整整6秒。
EDIT2:
Python bindings直接向selenium 2.0发布,但似乎无法等待Ajax加载完成该库:time.sleep(0.2) # Let the page load, will be added to the AP
(来自他们的示例)。
答案 0 :(得分:0)
答案 1 :(得分:0)
ImplicitlyWait通过JPype和Java绑定工作,并且可以满足这里所需的需求。