4

我知道有 Selenium IDE 和 Selenium Builder 作为 Firefox 插件来记录操作并将它们导出为例如 C#-Code。

但是是否还有一个工具可以帮助您按照 PageObject 模式创建 Selenium (2) WebDriver 测试代码?我知道这会很困难,因为程序必须知道应该如何实现抽象。

据我所知,这样的工具不存在吗?但是,由工具支持的创建 Selenium WebDriver PageObject-Code 的最佳方法是什么?

也许使用 Selenium 构建器只是通过 id、类名等创建引用并在我的代码中手动实现它们?这可能比我自己决定什么可以精确识别元素要快一些。但是为什么 Selenium Builder 的开发者动态创建元素引用

IWebDriver wd = new RemoteWebDriver(DesiredCapabilities.Firefox());
wd.FindElement(By.Id("NameField")).Click();
wd.FindElement(By.Id("NameField")).Clear();

而不是 FindBy 属性?

[FindsBy(Using = "NameField")]
public IWebElement nameField;

这些元素将是可重用的,并且代码会更短。

4

4 回答 4

6

在回答您的问题时,没有工具,我很高兴没有。人们过于依赖这些类型的工具。我还认为使用 Builder 或 IDE 为您完成这项工作不会更快。从短期来看,是的,从长远来看,绝对不是。

尽管建造者在“发现”方面要聪明得多,但它仍然不够出色。XPath 与 IDE 甚至 Firebug 和 Chrome 自己的开发者控制台一起失败了。

将为您服务的,是手动进行。

但是,如果您一心想要使用工具,那么请使用 Builder(只是因为它比 IDE 好一点)来构建您的代码。

至于“为什么”Builder 会提出这种代码,这是因为它基本且简单。这些工具旨在为您提供有效的基本代码。不是最佳实践的花哨代码。这是您应该手动执行的操作。您可能会发现 IDE 提供的内容非常相似。

任何试图出售这些工具作为自动化测试答案的人都是完全错误的。答案是给您的测试人员和开发人员足够的时间来协调一个体面的策略!

没有工具可以准确地定义动态元素的定位策略。具有在每个页面点击时更改的 ID 的东西。那么你期望它做什么呢?它会举起双手,给你最好的机会。在这里您可以介入并节省时间并制定有效的定位策略 - 这是 IDE/Builder 将在其中为您节省短期时间但当它倒下时您将花费长期时间修复它的地方。

于 2013-06-03T10:22:13.177 回答
1

有这样的工具,我目前正在研究这个开源项目:

SWD 页面记录器

Page Recorder 实际上完成了这个问题的工作。它允许在浏览器中记录 WebElements;在应用程序表单中调试/测试定位器并生成 PageObject 类的代码。

SWD Recorder 旨在消除测试自动化过程中最无聊的手动操作:从网络浏览器中抓取定位器并将其手动转换为 FindsBy 属性的活动。

Page Recorder 不会记录 PageObject 内部的步骤(动作),不知道会不会。我同意 Arran 的观点,即动作应该是手写的(并使用人类的智慧)。

您可以在上面的链接之后找到简短的描述和视频演示。此外,Unmesh 还发表了一篇很棒的博文,他是几本关于 Selenium 的热门书籍的作者:
Selenium WebDriver 的 PageObject Generator Utility

于 2014-01-07T00:16:55.603 回答
0

我听到了你的痛苦!为了避免完全相同的情况,我尝试创建一些非常有效的东西,并且我非常成功,除了我的过程大大减慢了我的脚本执行速度。如果我能解决它,它就可以滚动了。点击这里查看我的解决方案。我不确定是否有任何工具以及它们如何工作

于 2014-07-28T00:09:11.607 回答
0

试试Selenium Page Object Generator一个 chrome 插件。它非常简单,但是减少了您手动创建 PO 所花费的时间。

于 2017-01-05T01:15:41.433 回答