有没有办法确认使用Python / Selenium Webdriver在网页上存在jQuery?

时间:2017-08-18 20:23:56

标签: jquery python ajax selenium

我们有一个自行开发的自动化测试框架,它使用了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不存在)。

2 个答案:

答案 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")