【问题标题】:Obvious reason to move from Selenium RC to Webdriver.?从 Selenium RC 迁移到 Webdriver 的明显原因。?
【发布时间】:2012-05-28 05:04:26
【问题描述】:

过去 4 个月以来,我一直在使用 Selenium RC 进行自动化测试。

但最近我知道 Selenium RC 已被弃用。很多人建议我换成Selenium Webdriver

那么,任何人都可以告诉我 Selenium RC 有什么问题以及 Webdriver 比 RC 更好吗??

谢谢。

【问题讨论】:

    标签: selenium webdriver selenium-rc selenium-webdriver


    【解决方案1】:

    嗯,有多种原因。以下是几个,不分先后

    1. Webdriver 提供了比 selenium RC 更简洁的 API。最常见的例子是你有 selenium.type 和 selenium.typeKeys,两者的效果是一样的。 Webdriver 只为所有类型相关的操作提供了一种方法 sendKeys。简而言之,您可以说,webdriver 类组织得更好吗?

    2. Selenium 使用 javascript 注入工作。如果您使用 selenium 有一段时间了,那么您必须了解同源策略问题和 javascript 注入的限制。 Webdriver 通过为每个浏览器使用驱动程序来克服这个问题。对于 Firefox,这意味着 webdriver 将自己作为插件附加到浏览器,对于 IE,它使用自动化 atom,对于 chrome 和 opera,它使用 chrome 驱动程序。

    3. 由于上述原因,webdriver 测试比 Selenium 更快

    4. 与 selenium 相比,扩展 webdriver 要容易得多。 Webdriver 提供了可扩展的操作类,您可以组合并创建您自己的自定义操作。

    5. Webdriver 可以支持在移动设备上进行测试,例如 Iphone、ipad 和 android 手机和平板电脑。

    最后但并非最不重要的是,现在 selenium 项目中没有任何开发工作。现在可用的任何东西都将继续得到支持,但 selenium 没有新的方法或增强功能发生。 Selenium 和 webdriver 项目几年前合并,成为 Selenium 2.0

    您可以找到有关 webdriver here 和合并原因 here 的更多详细信息

    【讨论】:

    • @FranzEbner 根据我的个人经验 - 是的。它比 selenium 1 更快
    • 是的,WebDriver (Selenium 2) 比 Selenium RC (Selenium 1) 快
    【解决方案2】:

    什么 A.J.说。

    RC 存在无法轻易克服的限制。

    1. 可扩展性是一个伟大的问题。我真的不能强调这一点。当我扩展一些 RC 方法以完成他们通常所做的更多工作时,我遇到了一个不容易通过的障碍。在 RC 中可以用 750 行代码和大量使用 Command pattern 完成的事情,可以在 WebDriver 中通过几个简单的方法完成。

    2. same origin policy。它是一种 Javascript 安全策略,仅允许从您所在的域运行代码。而且由于 RC 完全用 Javascript 编写,因此您无法轻松地在域之间切换或使用一些重定向或使用包含来自多个域的内容的框架的网站。

    3. 由于 Javascript 中的另一个安全策略,您无法填写 <input type='file' /> 输入,必须使用多种解决方法。

    4. 你不能很好地使用onload Javascript 模式对话框。再次,必须解决这些问题。

      Selenium 试图向您隐藏这些对话框(通过替换 window.alert、window.confirm 和 window.prompt),这样它们就不会停止 执行您的页面。如果您看到一个警报弹出窗口,它是 可能是因为它在页面加载过程中触发,即 通常我们保护页面还为时过早。

    5. 您无法真正在 RC 中最大化窗口 :)。

    6. 当你需要等待一个元素时,你必须编写自己的方法。

    7. RC 不再开发,不会有新的东西。 WebDriver 花了一些时间来掌握所有功能,但现在 WebDriver 终于可以提供比 RC 更多的功能(等待和最大化)。它只会变得更好!

    8. RC 的getEval() 方法是WebDriver 的executeJavascript() 的一个可怜的表亲。前者返回 String 并且不能给出例如特定的页面元素。后者可以直接返回许多内置的语言数据结构,WebElementsLists,也可以将它们作为参数!这意味着您可以使用 WebDriver 找到一个元素,然后在其上运行一些 JS。使用 RC,您也必须使用 JS 来定位元素。这可以做到,但更难,更容易出错。

    主要是这样。不切换也是有原因的:WebDriver API 很年轻,而且还在不断变化。有时,当他们修复错误时,会有轻微的行为变化。因此,有时,升级并发现它破坏了某些东西是一件很痛苦的事情。

    也就是说,我不会回到 RC,因为 WebDriver 使用起来更好。我非常期待明年 WebDriver 能够修复其最烦人的问题。

    【讨论】:

    • 如果我继续使用这个 selenium RC,我将来会遇到问题吗?
    • 也许吧。也许不吧。如果你试图强制 RC 方法为你做更多的工作(例如,在不可见的元素上不失败,而不是完全跳过它们),你将很难实现它。如果您曾经使用过重定向到其他网站的网站。如果您需要获取onload JS 警报的文本。如果您需要任何 WebDriver 尚未带来和支持的东西。 Selenium RC 本身非常完整且强大,对您来说可能已经足够好了。现在行得通的,将来也会继续行得通。但是使用 WebDriver 可以更轻松地克服许多问题...
    • (另外,我又添加了一个过去一周对我来说很重要的原因)
    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多