硒1到硒2迁移

时间:2011-04-17 07:20:31

标签: testing selenium automation webdriver selenium-webdriver

硒2在过去几个月一直处于β期。如果我们有任何人从硒1中分析/迁移到硒2,我想知道学习

  1. 在变更#方面所付出的努力是多少,以容纳2个功能。方法/ API更改#
  2. Selenium 2中测试运行时间的性能提升多少
  3. 任何最佳实践/学习共享都很有用

4 个答案:

答案 0 :(得分:21)

自己完成过渡。如果你有Selenium 1的经验,Selenium 2实际上感觉完全不同。这是我的Selenium 2优点/缺点与Selenium 1我到目前为止看到的(我使用Python,因此其中一些是特定于Python的):

优点:

  • 快得多。
  • 无需运行单独的服务器。
  • wait_for_page_to_load(),wait_for_element_present()等已经过去了。所有元素交互,点击等现在都在阻止,这很好。唯一的问题是异步加载的内容(Ajax),请参阅Con bellow。

缺点:

  • 使用wait_for_page_to_load()加载/等待曾经“空闲”的异步内容现在需要编码。这些是我到目前为止找到的解决方案:
    • 使用PageFactory / AjaxElementLocatorFactory,如解释here,遗憾的是我找不到Python的等价物。
    • 使用webdriver.implicitly_wait(N),这似乎是用Python做的伎俩,但使用它似乎会导致我的脚本错过以前用于检测的更改元素。
    • 不要睡觉(T),循环直到元素出现等,这样会破坏整个事物的目的(并使wait_for_page_to_load看起来很漂亮)......
  • 整个事情仍然感觉有点生气。不同的驱动程序和绑定似乎错过了不同的功能。并不是说你不能使用它,而是准备好为某些问题寻找“替代解决方案”。
  • 文档有点可疑(与我猜的上一点相关)。特别是对于Python。准备好阅读代码并进行大量实验(幸运的是,使用Python很容易)。您可以在网上找到的大多数“教程”(再次,尤其是Python,Java似乎覆盖得更好)只是为了让您开始使用最简单的Web应用程序。
  • 没有PHP绑定,不是一个大的我喜欢Python,但我们的原始套件是PHP所以我注意到了。
  • SeleniumIDE似乎对Selenium 2无用。

其他差异:

  • 当您要求selenium查找时,您访问的页面元素必须在页面上“可见”。例如,如果您有一个菜单(包含链接列表),当您将鼠标悬停在其上时会打开,您必须确保它在您点击内部链接之前打开/可见(在Selenium 1中不是这种情况) )。这是它的用途,因为您将测试用户在页面上看到的内容,但需要额外的代码。我找到了两个解决方案
    • 运行一个可以打开菜单的Javascript,在我的情况下driver.execute_script("document.getElementById('dashboard_menu_navigation').show()")然后点击菜单项driver.find_element_by_link_text('Orders').click()
    • 使用鼠标/键盘类来模拟实际的交互,但这似乎在Python绑定中被打破了(参见上面的缺点):

示例(今天抛出'WebElement' object has no attribute 'mouse_move_to'):

element=driver.find_element_by_id('mn_dashboard')
mouse=Mouse()
mouse.move_to(element)

Cons列表似乎更长,但主要是如果你来自Selenium 1.我更喜欢Selenium 2的轻盈和速度,尽管早期的代码(在写作时使用2.0b4)整个事情是相当的可用。

希望能节省一些时间......

答案 1 :(得分:10)

从Selenium 1转移到Selenium 2就像从

移动一样简单
Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.example.com");
selenium.open("/");

Webdriver driver = new FirefoxDriver();
Selenium selenium = new WebDriverBackedSelenium(driver, "http://www.example.com");
selenium.open("/");

由于Selenium 2与浏览器绑定得更紧密,因此您会看到巨大的差异。我已经看到测试运行速度提高了至少2倍,但在某些情况下我看到测试运行速度提高了4倍。

您在Selenium期间学到的所有最佳实践都将在

之间进行翻译

答案 2 :(得分:1)

答案 3 :(得分:1)

您可以使用WebDriverBackedSelenium类将WebDriver接口转换为Selenium接口:

Selenium selenium = new WebDriverBackedSelenium(webDriver, baseUrl);

或者您可以使用方法getUnderlyingWebDriver()将Selenium接口转换为WebDriver接口:

WebDriver webDriver = ((WebDriverBackedSelenium)selenium).getUnderlyingWebDriver();

我发布了我最近关于如何开始使用Selenium 2的演示文稿的幻灯片:

http://www.slideshare.net/sebarmeli/getting-started-with-selenium-2

Selenium 2中最好的做法之一是PageObject模式。

如果您使用的是Java和Maven,您可能需要查看这个Archetype插件(这也让您初步了解PageObject模式):

https://github.com/sebarmeli/Selenium2-Java-QuickStart-Archetype