Javascript 如何使用Selenium处理jQuery应用程序的奇怪行为?

Javascript 如何使用Selenium处理jQuery应用程序的奇怪行为?,javascript,jquery,selenium,selenium-webdriver,Javascript,Jquery,Selenium,Selenium Webdriver,我正在处理一个使用jQuery开发的旧应用程序的稳定化。为了稳定它,我添加了一个方法,该方法使用javascript在与元素交互之前检查文档是否准备就绪document.readyState==“complete”,ajax调用是否已完成jQuery.active==0 但我仍然看到以下问题- 即使页面上存在元素,SeleniumWebDriver也无法找到它,即使轮询机制设置了一些超时。但是,通过在DOM中签入,我们可以找到相同的元素 UI被扭曲,当WebDriver试图单击某个元素时,它会给

我正在处理一个使用jQuery开发的旧应用程序的稳定化。为了稳定它,我添加了一个方法,该方法使用javascript在与元素交互之前检查文档是否准备就绪
document.readyState==“complete”
,ajax调用是否已完成
jQuery.active==0

但我仍然看到以下问题-

  • 即使页面上存在元素,SeleniumWebDriver也无法找到它,即使轮询机制设置了一些超时。但是,通过在DOM中签入,我们可以找到相同的元素
  • UI被扭曲,当WebDriver试图单击某个元素时,它会给出错误信息
    元素单击被拦截
    。但是,可以手动单击相同的元素
  • 即使应用程序有jQuery,当我们通过WebDriver执行javascrit
    jQuery.active==0
    时,也会导致
    jQuery未定义
    。然而,若我们通过浏览器控制台执行相同的查询,它将返回正确的结果
  • 综上所述,当我说有些东西起作用时,这意味着我在WebDriver启动的同一个浏览器实例中检查了它


    你能帮我解决这个问题吗?我已经挣扎了一周来稳定这一局面。

    这个问题有点模糊。然而,最好的稳定方法是让selenium以正确的方式等待元素(取决于您想要做什么)。我们是否可以帮助您解决一个更具体的问题?您是否可以为您正在自动化的页面发布一些HTML,以及您正在运行的Selenium代码?您可以在元素上添加显式等待,运行javascript单击以绕过
    元素单击拦截
    ,切换到
    iframe
    以查找元素等。检查
    文档。readyState
    并不总是查看页面是否已完全加载的最佳做法。对于您遇到的问题,有一些解决方法,但如果没有任何代码或HTML可供参考,我们将无能为力。请尝试将jquery移动到head中,并删除async/defer属性。确保元素不在iframe中,并使用===进行比较,而不是==谢谢@pguardiario,但我不知道如何实现您的语句-
    尝试将jquery移动到head中并删除async/defer属性。
    您能在这方面提供更多帮助吗?换句话说,如果jquery脚本标记在主体中的某个位置或具有async/defer属性属性,只需将其移动到头部并移除这些属性。