Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 页面对象模式的Selenium WebDriver记录器_C#_Selenium Webdriver_Selenium Ide_Pageobjects - Fatal编程技术网

C# 页面对象模式的Selenium WebDriver记录器

C# 页面对象模式的Selenium WebDriver记录器,c#,selenium-webdriver,selenium-ide,pageobjects,C#,Selenium Webdriver,Selenium Ide,Pageobjects,我知道有Selenium IDE和Selenium Builder作为Firefox插件来记录动作并将其导出,例如作为C#代码 但是是否还有一个工具可以帮助您按照页面对象模式创建Selenium(2)WebDriver测试代码?我知道这很难,因为程序必须知道抽象应该如何实现 据我所知,这样的工具并不存在?但是,创建Selenium WebDriver页面对象代码的最佳方法是什么,并由工具支持 也许使用Selenium builder只是通过id、类名等创建引用,然后在我的代码中手动实现它们?这可

我知道有Selenium IDE和Selenium Builder作为Firefox插件来记录动作并将其导出,例如作为C#代码

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

据我所知,这样的工具并不存在?但是,创建Selenium WebDriver页面对象代码的最佳方法是什么,并由工具支持

也许使用Selenium builder只是通过id、类名等创建引用,然后在我的代码中手动实现它们?这可能比我自己决定如何准确识别元素快一点。但是为什么SeleniumBuilder的开发人员要动态创建元素引用呢

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;

元素是可重用的,代码也会更短。

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

虽然建设者在“发现”方面要聪明得多,但它仍然不够出色。XPath是它、IDE、甚至Firebug和Chrome自己的开发人员控制台的落脚点

你需要的是手动操作

然而,如果你执意要使用一个工具,那么就使用构建器(仅仅因为它比IDE好一点)来构建你的代码

就“为什么”而言,构建者提出了这种代码,这是因为它是基本和简单的。这些工具旨在为您提供有效的基本代码。不是花哨的代码,这是最佳实践。这是您应该手动执行的操作。您可能会发现IDE提供的功能非常相似

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


没有任何工具可以准确地定义动态元素的定位策略。有一个ID的东西在每次点击页面时都会改变。那么你期望它做什么呢?它会把它的手举到空中,给你最好的机会。这就是你投入其中,节省时间,制定一个有效的定位策略的地方——这就是IDE/Builder将为你节省短期时间,但你将花费长期时间来修复它。

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

页面记录器实际上完成了这个问题所涉及的工作。它允许在浏览器中记录WebElements;调试/测试应用程序窗体内的定位器,并生成PageObject类的代码

SWD记录器旨在消除测试自动化过程中最无聊的手动操作:从web浏览器中删除定位器并手动将其转换为FindsBy属性的活动

页面记录器不记录PageObject内部的步骤(操作),我不知道它是否会。我同意Arran的观点,动作应该是手写的(并且使用人类的智慧)

您可以在上面的链接中找到简短的描述和视频演示。此外,埃米什还发表了一篇博文,他写了几本关于硒的畅销书:

我听到了你的痛苦!为了避免完全相同的情况,我尝试创建一些真正有效的东西,我非常成功,只是我的过程大大降低了脚本的执行速度。如果我能确定它已经准备好了。单击查看我的解决方案。我不确定是否有任何工具以及它们是如何工作的

请尝试Selenium Page Object Generator一个chrome插件。
不过,它非常简单,减少了手动创建PO的时间。

我认为您的论点是正确的。但是你认为,或者你知道那些从未进行过编码的人是否能够编写这样的Selenium测试?