【问题标题】:Watir and JavascriptWatir 和 Javascript
【发布时间】:2011-04-05 20:48:03
【问题描述】:

我正在研究多种网络测试工具。我现在正在尝试等待。我主要关心的是处理javascript。我只是想知道是否有人可以给我一个关于在 watir 中处理 javascript 的概述。它有哪些陷阱和困难?基本上是用javascript注入告诉页面做什么?

如果有人想推荐其他网络测试工具,如 watir,我将不胜感激。 我首先尝试了 selenium,发现它有点不可靠。

市场上有没有便宜的工具?

谢谢!

【问题讨论】:

    标签: javascript automated-tests watir


    【解决方案1】:

    Watir + Javascript => 通常可以将 javascript 注入到您的测试中,例如

    @b.goto("javascript:openWin(2)")

    当您说“处理 javascript”时,我假设您的意思是 Watir 在渲染/执行方面处理客户端代码的能力如何。由于 Watir 驱动真正的浏览器(如 Selenium),因此 JS 将按预期执行一般

    Watir 有许多不同的驱动程序,例如watir、firewatir、safariwatir、chromewatir、operawatir,现在是 watir-webdriver。根据浏览器和操作系统的不同,它们都以略微不同的实现方式驱动浏览器。例如 Firewatir 使用 JSSH,它实际上是通过 JS 控制浏览器。你能解释一下硒“不可靠”是什么意思吗?

    我建议查看 watir-webdriver 的最新实现。这样,您就可以在新的驱动程序实现之上获得一个不错的 watir API 的好处。 Webdriver 在支持方面有一些强大的支持(Selenium 2 使用它,Google 正在对其进行编码!)所以我认为这是一个安全的选择。您还可以使用此实现控制大多数主要浏览器。

    替代工具 => http://wiki.openqa.org/display/WTR/Alternative+Tools+For+Web+Testing

    【讨论】:

      【解决方案2】:

      蒂姆提供了一个很好的答案。

      我唯一需要补充的是,我发现有时我必须使用 watir 方法来触发特定的 javascript 事件,例如 onmouseover,以便准确模拟用户与页面的交互.由于 watir 对此有一个方法,因此困难的部分不是 watir 代码,而是对页面进行逆向工程(或注意基于用户操作的微妙页面交互)以找出哪些元素“连接”到哪些事件和顺序针对这些特定元素触发这些事件。

      通常很容易查看元素的 HTML 并了解发生了什么。但是使用一些自定义控件可能需要一些学习,因为它们可以很好地“隐藏”所有事件连接,并且您可能必须使用类似的东西解析页面的各个方面(样式和所有内容)提琴手。

      (毕竟,普通用户永远不会“强制”执行 javacript 或“注入”javascript。他们将使用鼠标和键盘与页面交互,任何 javascript 都将是脚本的结果在页面加载时执行,或者作为通过基于特定用户操作的事件触发的脚本的结果)

      【讨论】:

      • +1,并且您可以通过一些额外的代码使用动态硬件点击(在 google 中搜索 watir 硬件点击),前提是您可以识别 WATiR 中的页面元素。
      【解决方案3】:

      如果您的 JS 没有触发 HTML 刷新,那么 WATiR 会感到困惑。当您单击 WATiR 中的对象时,它会等待页面加载后再继续。您可以通过自定义等待命令和使用“.click!”来克服这个问题。

      如果你是一个合理的 ruby​​ 编码器,那么 WATiR 是大多数事情的解决方案。它有可能成为一个相当稳定和可靠的自动化网络测试来源。

      您可能想研究 Firewatir、sahi、watir-webdriver,只是为了给您更多线索(如果您还没有的话,建议您在谷歌上搜索“开源网络测试”等。我研究了这些和许多出于成本、功能、灵活性和先验知识(在 ruby​​ 和 WATiR 中)的原因,更多并选择了 WATiR。使用正确的 gem,它将与大多数数据库和 Excel(或其他文件)对话以加载测试数据。

      我目前正在使用 WATiR 测试 ZK 生成的接口,其中没有一个 ID 是静态的,并且有很多 AJAXiness 正在进行。我刚刚构建了一个框架来处理这些问题,并且效果很好。

      另外,some semi-true and true things that may help

      【讨论】:

        【解决方案4】:

        要从 watir 传递 javascript,请使用 browser.execute_script() 示例:

        Watir::Wait.until { $browser.execute_script("return document.readyState") == "complete" }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-06
          • 2018-08-13
          相关资源
          最近更新 更多