我们有一个自行开发的自动化测试框架,它使用了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秒。这意味着登录页面将有3分钟的等待时间(输入用户名为1分钟,密码为1,登录按钮为1),等待Ajax检查超时,因为jQuery只是不是出现在页面上。
在进行WebDriverWait检查之前,我是否可以寻找确认jQuery实际存在于网页上的内容?会做一些脚本元素检查是否足够?
像:
if driver.find_element_by_tagname("<script>")
如果返回True则会在页面上显示一个脚本 - 不一定是jQuery,但它会更接近,也许可以使用更具体的find_element_by。困难的部分是我试图检查否定(jQuery不存在)。
答案 0 :(得分:3)
您可以查看jQuery
&#34;全球&#34;用脚本定义:
is_jquery_present = driver.execute_script("return (typeof jQuery != 'undefined');")
这虽然需要测试,因为页面加载jQuery本身也需要时间。
寻找特定的script
可能适用于某些页面,但没有保证&#34;导入&#34; jquery库,例如,至少JS源可以打包和缩小。
答案 1 :(得分:1)
您可以选择将支票短路。
return 0 == driver.execute_script("return (jQuery || {}).active")
如果jQuest不存在,它将使用一个空对象,其中有效对象不在里面。
或者,如果你希望jQuery不存在则为真
return 0 == driver.execute_script("return (jQuery || { active: 0 }).active")