安装(VS扩展、程序包)

【工具】->【扩展管理器】,安装SpecFlow

【工具】->【库程序包管理】->【程序包管理器控制台】

PM> Install-Package SpecFlow -Version 1.9.
PM> Install-Package NUnit
PM> Install-Package Selenium.WebDriver
PM> Install-Package Should

使用中文

# language: zh-CN

and * ,而且,并且,同时
background 背景
but * ,但是
examples 例子
feature 功能
given * ,假如,假设,假定
scenario 场景,剧本
scenarioOutline 场景大纲,剧本大纲
then * ,那么  
when * ,当

我想开始新游戏

作为破译者/我想开始新游戏.feature

作为破译者/我想开始新游戏Steps.cs

 using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using Should;
using TechTalk.SpecFlow; namespace CodeBreakerGame.Specs.作为破译者
{
[Binding]
public class 我想开始新游戏Steps
{
private IWebDriver driver = new FirefoxDriver(); [Given(@"游戏还没有开始")]
public void 假如游戏还没有开始()
{
driver.Navigate().GoToUrl("http://localhost:1387/Game/Index");
} [When(@"我开始新游戏")]
public void 当我开始新游戏()
{
driver.FindElement(By.TagName("button")).Click();
} [Then(@"我应该看到""(.*)""")]
public void 那么我应该看到(string message)
{
driver.FindElement(By.TagName("div")).Text.ShouldContain(message);
} [AfterScenario]
public void AfterScenario()
{
driver.Quit();
}
}
}

我想提交猜测的密码

作为破译者/我想提交猜测的密码.feature

作为破译者/我想提交猜测的密码Steps.feature

 using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using Should;
using TechTalk.SpecFlow; namespace CodeBreakerGame.Specs.作为破译者
{
[Binding]
public class 我想提交猜测的密码Steps
{
private IWebDriver driver = new FirefoxDriver(); [Given(@"真实密码是""(.*)""")]
public void 假如真实密码是(int code)
{
driver.Navigate().GoToUrl("http://localhost:1387/Game/Guess/" + code.ToString());
} [When(@"我猜""(.*)""")]
public void 当我猜(int guess)
{
driver.FindElement(By.Id("Guess")).SendKeys(guess.ToString());
driver.FindElement(By.TagName("button")).Click();
} [Then(@"标记为""(.*)""")]
public void 那么标记为(string mark)
{
driver.FindElement(By.TagName("strong")).Text.ShouldEqual(mark);
} [AfterScenario]
public void AfterScenario()
{
driver.Quit();
}
}
}

Action

 [HttpPost]
public ActionResult Guess(string code, FormCollection collection)
{
var guess = collection["Guess"]; var mark = "";
for (int i = ; i < code.Length; i++)
{
if (code[i] == guess[i])
mark += "+";
} for (int i = ; i < code.Length; i++)
{
for (int j = ; j < code.Length; j++)
{
if (i != j && code[i] == guess[j])
mark += "-";
}
} return View(new[] { guess, mark });
}

测试结果

源代码

CodeBreakerGame.rar

说明:由于受文件大小的限制,压缩包里删除了文章开头提到的4个库程序包

Selenium和Firefox版本兼容性对照表

Selenium Firefox
2.53.1 47.0.1

说明:需要注意Selenium.WebDriver和Firefox的版本,如果不兼容可能导致测试运行不了

参考文献

[1] http://www.specflow.org/

[2] https://github.com/cucumber/gherkin/blob/master/gherkin-languages.json

[3] https://github.com/SeleniumHQ/selenium

[4] http://seleniumhq.github.io/selenium/docs/api/dotnet/

[5] http://www.specflow.org/documentation/

VS2010中使用 SpecFlow + Selenium.WebDriver的更多相关文章

  1. Selenium_用selenium webdriver实现selenium RC中的类似的方法

    最近想总结一下学习selenium webdriver的情况,于是就想用selenium webdriver里面的方法来实现selenium RC中操作的一些方法.目前封装了一个ActionDrive ...

  2. Selenium WebDriver中一些鼠标和键盘事件的使用

    转自:http://www.ithov.com/linux/133271.shtml 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击 ...

  3. Java中通过Selenium WebDriver定位iframe中的元素

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题:有一些元素,无论是通过id或是xpath等等,怎么都定位不到. 分析:这很可能是因为你要定位 ...

  4. Selenium WebDriver 中鼠标和键盘事件分析及扩展(转)

    本文将总结 Selenium WebDriver 中的一些鼠标和键盘事件的使用,以及组合键的使用,并且将介绍 WebDriver 中没有实现的键盘事件(Keys 枚举中没有列举的按键)的扩展.举例说明 ...

  5. 转:总结Selenium WebDriver中一些鼠标和键盘事件的使用

    在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...

  6. Selenium WebDriver 中鼠标和键盘事件分析及扩展[转载]

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-keyboard/ 概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模 ...

  7. 总结Selenium WebDriver中一些鼠标和键盘事件的使用

    在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...

  8. selenium.webdriver.common.keys 模块中常用的变量

    表11-5 selenium.webdriver.common.keys 模块中常用的变量属性 含义Keys.DOWN, Keys.UP, Keys.LEFT,Keys.RIGHT 键盘箭头键Keys ...

  9. Selenium WebDriver 中鼠标和键盘事件分析及扩展

    [From] http://www.51testing.com/html/18/631118-861557.html 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和 ...

随机推荐

  1. $微信小程序开发实践点滴——接入Bmob后端云

    Bmob后端云官网:http://www.bmob.cn/ 微信公众平台官网:https://mp.weixin.qq.com/ 微信小程序官方开发文档:https://mp.weixin.qq.co ...

  2. 设计模式(六) xml方式实现AOP

    1.1. Aop,  aspect object programming  面向切面编程 功能: 让关注点代码与业务代码分离! 关注点, 重复代码就叫做关注点: 切面, 关注点形成的类,就叫切面(类) ...

  3. NAT配置与管理

    为解决IPv4地址日益枯竭,出现NAT(Network Address Translation,网络地址转换)技术.NAT可以将来自一个网络的IP数据报报头中的IP地址(可以是源IP地址或目的IP地址 ...

  4. 如何选择单片机和Android-LInux-ARM开发板?

    源: 如何选择单片机和Android-LInux-ARM开发板?

  5. readonly、disabled、display、visible的区别

    display和visible的区别: (1)首先说明的是display:none和visible:hidden都能够实现将网页上某个元素隐藏起来. (2)如果在样式文件或页面文件代码中直接用disp ...

  6. React Native混合开发中必须要学会点FlexBox布局

    在前面的案例中,界面的搭建都是采用CSS的布局,基于盒子模型,依赖 display属性 , position属性, float属性.但对于那些特殊布局非常不方便,比如,垂直居中. 一种全新的针对web ...

  7. mfc报文相关算法

    1.传入_T("AAAABBBBCC"),返回_T("AA AA BB BB CC") CString FormatPacket(CString packet_ ...

  8. 批处理文件 bat 的入门命令

    1. echo on和echo off echo on表示打开回显,echo off表示关闭回显,何为回显?打开回显就是执行命令时会把命令显示出来,关闭回显反之. 2.echo [message] 这 ...

  9. tomcat官方下载连接——安装版&绿色版

    Tomcat绿色版Windows64位9.0.10 http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat- ...

  10. scala学习手记39 - 模式匹配

    在java中有switch/case这样的模式匹配语句,可以匹配的类型包括int,byte,char,short, enum,在java8又支持了字符串. 在scala中也有类似的模式匹配语句,即ma ...