Selenium 2 在过去几个月一直处于测试阶段。我想知道我们是否有人分析/从 selenium 1 迁移到 selenium 2
- 为了适应 2 项功能,在变更#方面付出了多少努力。方法/API 更改#
- Selenium 2 在测试运行时间方面的性能改进了多少
- 任何最佳实践/学习分享都会很有用
最佳答案
我自己正在经历转变。如果您有 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)中被破坏了(参见上面的缺点):
- 运行一个 Javascript 来打开你的菜单,在我的例子中
示例(今天抛出 '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/