c# - 将变量作为数组 specflow c# 传递

标签 c# arrays specflow

我正在尝试使用 Specflow 来使用 Selenium 自动化 Web 测试。到目前为止,一切都很好,但我现在遇到了问题。我的步骤之一允许用户输入变量,该步骤如下所示:

     Given I click the (VARIABLE) Menu

它背后的代码相当简单,只需根据传递的文本点击一个链接:

     driver.FindElement(By.XPath("Xpath to get to the variable")).Click();

但是,后面的步骤必须使用此信息。很好,您可以使用“ScenarioContext.Current.Add(string, variable)”,我知道并一直在使用它。它满足我最先得知的需求。

我的问题是,现在企业希望能够同时添加多个项目。这带来了两个问题。尝试再次调用该步骤会引发异常:“已添加具有相同键的项目。”如果我将其放入场景大纲中,这将允许我在第二次运行中再次调用该变量,我将无法在最后一步中使用第一个变量。

从逻辑上讲,这意味着多次传入一个变量是个问题(这是有道理的,因为它是作为字符串传入的),因此将变量作为数组传入似乎是合乎逻辑的方法。我的想法是,当我将参数作为数组而不是字符串从一个步骤传递到另一个步骤时,理论上 不会遇到此错误,然后我将能够遍历在后面的步骤中使用 for 循环的数组。这似乎是 SpecFlow 应该能够做到的事情,但我在寻找如何实现这一点时遇到了问题。有没有人知道如何做到这一点?我试图仅仅使用:

     Scenario.Context.Current.Add(string, variable).ToArray();

但是,这不起作用,我在 SpecFlow 文档中找到的所有“ToArray”示例似乎都没有真正改变您从一个步骤传递到另一个步骤的变量成一个数组,它似乎只在各个步骤内部使用,从不在步骤之间传递。在 SpecFlow 中是否可以使用 ScenarioContext.Current.Add(string, variable) 作为数组传递参数?

提前致谢。

最佳答案

解决您的问题的最简单方法是在第一步中将数组(或列表)添加到上下文中,然后将其取出并添加到其中,然后在以后的步骤中再次替换它:

List<string> list = new List<String>();
list.Add(variable)
ScenarioContext.Current.Add(name, list);

后来

List<String> currentList = (List<String>) ScenarioContext.Current[string];
currentList.Add(variable);
ScenarioContext.Current[name]=list;

不过,我觉得有责任指出您当前解决方案的一些问题。你应该调查 PageObject pattern并将您的元素选择 XPath 隐藏在您的页面对象中。想象一下,企业决定更改存储信息的元素。现在您必须更改执行此操作的每个测试:

driver.FindElement(By.XPath("Xpath to get to the variable")).Click();

对于那个变量。使用页面对象模式,它隐藏在页面对象内部,您只有一个地方可以更改。

我个人也会考虑使用 context injection 共享数据因为我发现这允许对数据进行强类型化(因此不需要像上面的示例中那样强制转换)并且它允许您知道存储了哪些数据,而不仅仅是一堆随机的东西)。

关于c# - 将变量作为数组 specflow c# 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33080841/

相关文章:

c# - 是否可以通过代码将证书上传到门户?

c# - 迭代器 block 的编译器实现不正确?

java - 将元素添加到数组的最后一个位置

javascript - 如何在javascript中的选定单元格行上添加数据?

c# - xUnit : Mutiple Assertions or Soft Assert

c# - BoDi.ObjectContainerException 接口(interface)无法解析 : OpenQA. Selenium.IWebDriver

c# - TCP Hole Punch (NAT Traversal) 库之类的?

C# Geckofx 浏览器图像下载

python - 根据 numpy 数组中设置的条件创建一个新的 numpy 数组

c# - Specflow - 对任何关键字使用相同的步骤定义