testing - Selenium 1 到 Selenium 2 的迁移

标签 testing selenium automation webdriver selenium-webdriver

Selenium 2 在过去几个月一直处于测试阶段。我想知道我们是否有人分析/从 selenium 1 迁移到 selenium 2

  1. 为了适应 2 项功能,在变更#方面付出了多少努力。方法/API 更改#
  2. Selenium 2 在测试运行时间方面的性能改进了多少
  3. 任何最佳实践/学习分享都会很有用

最佳答案

我自己正在经历转变。如果您有 Selenium 1 的经验,Selenium 2 实际上感觉很不一样。这是我目前看到的 Selenium 2 与 Selenium 1 的优缺点(我使用 Python,所以其中一些是特定于 Python 的):

优点:

  • 快得多。
  • 无需运行单独的服务器。
  • wait_for_page_to_load()、wait_for_element_present() 等已不复存在。所有元素交互、点击等现在都处于阻塞状态,这很好。唯一的问题是异步加载的内容 (Ajax),请参阅下面的 Con。

缺点:

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

其他区别:

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

示例(今天抛出 '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),但整个事情相当可用。

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

关于testing - Selenium 1 到 Selenium 2 的迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5692173/

相关文章:

unit-testing - 我应该对数据访问层进行单元测试吗?这是一个好的做法吗?如何去做?

testing - casperjs 测试 cow-test.js 未定义不是评估 casper.test.begin 的函数

java - Selenium - 查找网页的所有元素

authentication - 如何修复 google-sites-liberation 的登录以再次为域站点备份谷歌应用程序?

winforms - 在 Beta 测试期间检测异常

unit-testing - 如何通过 JEST 检测模拟依赖库中的调用?

java - 使用 Java 将 Firefox 的 Selenium IDE 转换为 Chrome 和 Internet Explorer

Python Selenium 等待 innerHTML

java - 为什么 TestNG 优先级功能未按预期顺序运行

python - 在命令提示符中出现提示时自动按键输入