为什么我们使用WebDriver而不是Selenium IDE?

为什么我们不能在Selenium IDE中logging所有的testing用例,将它导出到Java / WebDriver并在Eclipse中使用WebDriver运行?

我需要一个清晰的解释,因为我非常困惑的使用WebDriver!

任何人都可以请解释为什么WebDriver的IDElogging脚本失败?

为什么我们不能在IDE中logging所有的testing用例,将它导出到java / webdriver并在webdriver中运行

伟大的问题,这里是答案:

Selenium IDE是一个logging和回放工具,非常容易使用,但是非常不可靠。 在Web应用程序中,logging和回放通常是不被赞赏的。 由于Web应用程序经常发生变化,由于可能出现的维护噩梦,IDE不是生产环境的理想解决scheme。

让我给你一个实际的例子。 您logging您的testing,并find一个具有dynamicID的元素。 当然我们可以将它导入到日食中,但是当testing开始失败时会发生什么? 为什么不简单地让你的testing敏捷和独立,抓住这些摆在首位。

它也归结于您的testing自动化的原则。 我认为testing自动化(以及其他一些专业人员)认为应该从编程的angular度来考虑testing自动化。 程序员应该编写testing,并维护testing。 理想情况下,您的质量保证人员应接受培训,以编写和维护自己的testing。

所以,再回到你的问题,IDE被devise成一个快速的自动化解决scheme,而不是一个完整的回归套件的解决scheme。

任何人都可以请解释为什么在Webdriver IDElogging脚本失败?

我有一段时间没有使用IDE,但是失败的原因是因为导出的脚本只是步骤 ,而不是整个Java文件。 这也是因为Selenium IDE出口在如何运行testing时应该是不可知论的。 说我是jUnit的用户..如果Selenium IDE始终将它导出到TestNG呢? 这不公平..老实说,我宁愿创build我自己的testing,而不是每改变一行我创build我的testing文件。

您可以阅读所做的研究的全文,称为为什么Web应用程序的logging/重放testing打破?

为什么我们不能在Selenium IDE中logging所有的testing用例,将它们导出到Java / WebDriver并使用Eclipse在WebDriver中运行。

你实际上可以很容易地用Selenium IDE做到这一点。 在Selenium IDE中loggingtesting用例/testing套件,导出到“Java / JUnit 4 / Webdriver”到.java文件。 这将生成一个JUnittesting,您可以从Eclipse导入和运行(当然,正确版本的JUnit)。

这不是100%可靠的,你可能需要做一些手动的修改/更正,但总的来说,它工作得很好。 从一个小小的testing箱开始,从那里开始工作。

为什么不在IDE中录制并使用WebDriver播放录音?

IDE不知道等待什么

假设Bob正在执行手动检查并logging他与Selenium IDE的交互。 他执行一个需要一段时间来更新GUI的操作,当操作完成时,他点击一个button。 Bob知道GUI已经完成更新,因为当操作开始时显示的微调框在操作完成时被移除。 在点击button之前IDE如何捕获操作必须完成的事实? (注意,这里并不是假设button被禁用,直到操作完成。)这不是一个假设:当你testingdynamic表(如DataTablespipe理的那些表)时,用户可以随时改变任何东西。

这可能是由于使用WebDriver而使用IDE创build的一系列命令失败的原因之一。 它只是不知道该等什么。

可以在IDE中手动添加等待,但是如果您正在这样做,那么您就不再“仅logging所有testing用例”。 你在做什么变得更像是为WebDriver编写代码。

用户效率低下

不久之前,出现了一个Selenium问题,用户希望Selenium在一个有多页logging的表中点击最后一个logging。 所以问题是,我怎么能通过表,一直到最后一页,然后点击最后一个logging? 有人(也许我也许是别人)指出,如果表是可sorting的,可以按相反顺序sorting,然后Selenium代码可以点击第一条logging。 这是2个操作,而不是p+1操作:点击p次,其中p是页面的数量,再加上1次点击logging。

当我们为WebDriver编写代码时,我们有机会编写testing,以避免走景观路线,以得到我们想要的结果。 关于为什么它很重要的技术细节见下一个点。

selenium的运作可能是成本高昂的

如果运行Selenium命令的软件是本地的,并且您的浏览器是本地的,那么您可能不会觉得Selenium操作的成本很高,但是如果您在一台机器上运行命令并且浏览器是远程的,那么您会发现速度显着下降。 例如,如果您在Sauce Labs VM或BrowserStack VM中生成浏览器来运行testing套件,则networking延迟将会大大增加套件完成所需的时间。 对于一个完整的应用程序testing套件,这可能意味着更多的分钟。

IDE生成一系列命令,每个命令都需要Selenium脚本和浏览器之间的往返行程。 每往返加起来。 假设我想检查两个元素是否包含相同的文本。 我不打算使用Selenese,因为我通常不使用IDE,而是使用Python中的WebDriver代码,脚本可能是:

 a = driver.find_element_by_id("a") b = driver.find_element_by_id("b") assert_equal(a.text, b.text) 

此代码需要4次往返:每个find_element...往返find_element... ,每次访问text字段一次。 同样的testing可以写成:

 a_text, b_text = driver.execute_script(""" var a = document.getElementById("a"); var b = document.getElementById("b"); return [a.textcontent, b.textContent]; """); assert_equal(a_text, b_text); 

这只需要一次往返。 当你使用IDE来logging动作的时候,命令的顺序就像前面的片段一样:大量的往返行程。 当您为WebDriver编写代码时,您有机会在编码时进行优化。

这并不意味着Selenium IDE没有用,但我永远不会想到只用它录制testing,然后用WebDriver播放这些录音。

如果你是一个新手 ,你实际上可以使用80%的IDE脚本作为你的webdriver JAVA脚本,只需要稍微改进你的导出IDE脚本,它就可以正常工作。

但是当你开始testing复杂的function时,你必须学习一些基本的java方法来解决它!

webdriver允许您在Selenium服务器上执行通过Selenium IDE捕获的testing用例,或者通过RC执行到多个服务器的testing用例。 这包括与支持Selenium的提供商集成的选项(请参阅底部的链接)。

例如,如果您已经在IDE中捕获了您的testing用例,则可以轻松地与您自己的selenium服务器或像Saucelabs这样的提供程序集成来处理在Ubuntu上的Firefox,OSX上的Safari和Windows 8上的IE10上运行testing用例与任何testing用例一样,你可以从你的IDE(Eclipse / IDEA / etc),你的构build器(maven / gradle /),和/或通过CI系统运行它。

查看https://saucelabs.com/selenium获取一些示例。; 我们还使用我们的seleniumtesting用例进行Soasta负载testing – WebDriver允许简单的IDEtesting在许多不同的上下文中使用。

因为当代码的复杂性会增加时,使用IDE来pipe理它将会很困难。 使用IDE维护脚本将很困难。

另外将testing用例从IDE导出到webdriver不是100%可靠的。

我不敢苟同。 当简单的logging和回放可以在很短的时间内达到相同的结果时,我没有理由需要维护额外的代码。

我同意logging脚本的impl必须是敏捷的。 它不能像构build命令一样简单,而且必须使其敏捷,甚至实现特定于被testing应用程序的自己的macros(又名命令/别名)。

不过,如果在像stream量控制这样的less量Selenium IDE插件的帮助下正确实施,那么维护如此复杂的testing套件并通过HTML Runner进行播放变得轻而易举。 我已经使用Selenium IDE的HTML脚本来完全覆盖复杂的网站,并重复使用相同的脚本的应用程序的所有响应模式。

维护简单,因为IDE将帮助您快速调整失败的cmd,并且可以通过等待页面上的DOM内容更改来轻松地解决AJAX等待问题。 我仍然不相信这个AJAX解雇Selenium IDE的借口。

对于Selenium IDE和Maven的SureFiretesting插件使用的stream控制命令/别名/macros的Maven集成,请参阅: https : //github.com/paulbors/sideflow

随意在您的产品中使用它,并根据需要进行改进。

其他人已经说了很多有用的答案。 缺less的一件事是,如果您编写代码而不是使用IDE,则可以更改数据库。 这取决于你正在testing的网站这是多么有用,但这里有一些我经历过的有用的例子。 在一个案例中,网站有一个class级的多个部分。 我们的一个testing是将这些部分合并为一个。 IDE不能这样做。 但是使用webdriver,我们可以将所有testing数据添加到数据库中,执行合并,然后从数据库中删除数据。

Webdriver的另一个优势是Selenium Grid。 通过网格,您可以在多个浏览器上并行运行testing。 这使您的testing运行得更快,您可以更彻底地testing代码。