【发布时间】:2015-09-15 20:00:17
【问题描述】:
我是 C# 新手,我正在尝试使用 SpecFlow,就像我过去使用 Gherkin 一样,通过为项目提供唯一名称,然后在步骤定义中传递名称。我的问题是关于如何在创建对象时添加标识符,这样我就可以调用该对象,而不必在每次创建步骤时都传递对象的实际名称。
因此,例如,代码如下所示:
[When(@"I click the (.*) button")]
public void ClickTheButton(string ButtonName)
{
driver.Click(ButtonName)
//ButtonName would be a string that would call to the ID for the ADD button
}
我希望能够输入“添加”之类的内容(因此该行将显示为“当我单击添加按钮时”),然后让代码搜索“添加”标识符。
我知道这在 Ruby/Cucumber 中是可能的,方法是使用 DOM,然后传入带有小黄瓜名称的 XML。在 Ruby/Cucumber 中,对象看起来像这样:
<button gherkin_name="ADD" key="id" value="add_button_12685"/>
但是,我发现在 C# 中使用 SpecFlow 绝对没有办法做到这一点,而这是我真正需要能够做到的事情。
有没有办法做到这一点?我真正想做的就是将业务用户实际可以使用的句柄/参数名称链接到页面对象,就像在 Ruby/Cucumber 中一样,无需让用户知道后台代码。而且,顺便说一句,对象的名称几乎与我添加的小黄瓜行完全相同,因此让用户编写它们非常奇怪。这就是我希望只为用户提供一个标识符的原因。
提前感谢您的帮助。
编辑:我现在意识到我在原始帖子中不够清楚,所以也许一些背景知识会有所帮助。我正在使用 Selenium-Webdriver 来测试一个包含数百个项目的网站。为每个页面上的每个项目编写不同的步骤将非常乏味和耗时。因为页面上有许多具有完全相同特性的完全相同的项目(例如,在一个页面上有 50 个按钮,它们的行为都相似,而网站有几十个页面),编写一个方法来测试它们似乎是最合乎逻辑的想法。使用业务可以使用的标识符来识别这些项目将减少 Steps 内部的体积、编写的步骤数以及业务用户使用作为最终目标的代码感到自在的可能性。
【问题讨论】:
标签: c# selenium identifier specflow pageobjects