VS2010中使用 SpecFlow + Selenium.WebDriver
安装(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 });
}
测试结果

源代码
说明:由于受文件大小的限制,压缩包里删除了文章开头提到的4个库程序包
Selenium和Firefox版本兼容性对照表
| Selenium | Firefox |
| 2.53.1 | 47.0.1 |
说明:需要注意Selenium.WebDriver和Firefox的版本,如果不兼容可能导致测试运行不了
参考文献
[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的更多相关文章
- Selenium_用selenium webdriver实现selenium RC中的类似的方法
最近想总结一下学习selenium webdriver的情况,于是就想用selenium webdriver里面的方法来实现selenium RC中操作的一些方法.目前封装了一个ActionDrive ...
- Selenium WebDriver中一些鼠标和键盘事件的使用
转自:http://www.ithov.com/linux/133271.shtml 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击 ...
- Java中通过Selenium WebDriver定位iframe中的元素
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题:有一些元素,无论是通过id或是xpath等等,怎么都定位不到. 分析:这很可能是因为你要定位 ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展(转)
本文将总结 Selenium WebDriver 中的一些鼠标和键盘事件的使用,以及组合键的使用,并且将介绍 WebDriver 中没有实现的键盘事件(Keys 枚举中没有列举的按键)的扩展.举例说明 ...
- 转:总结Selenium WebDriver中一些鼠标和键盘事件的使用
在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展[转载]
原文:http://www.ibm.com/developerworks/cn/java/j-lo-keyboard/ 概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模 ...
- 总结Selenium WebDriver中一些鼠标和键盘事件的使用
在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...
- selenium.webdriver.common.keys 模块中常用的变量
表11-5 selenium.webdriver.common.keys 模块中常用的变量属性 含义Keys.DOWN, Keys.UP, Keys.LEFT,Keys.RIGHT 键盘箭头键Keys ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展
[From] http://www.51testing.com/html/18/631118-861557.html 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和 ...
随机推荐
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- html 基础--一般标签
<html> --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <body& ...
- AngularJS post传值后台获取不到
AngularJS post传值后台获取不到 一般的思路: 解决办法: 1.设置一下default head 2.参数转换一下data:$.param({orderNo: orderNo,sessi ...
- sqlservr.exe占用大量内存
SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看sta ...
- Winform ObservableCollection 添加删除修改无效
WPF中ObservableCollection 可以很好的使用. 在Winform中,之前使用ObservableCollection 做了几个功能,貌似增删改都可以. 今天写个Demo的时候发现不 ...
- 字符数组(char)和字符串(string)的转换
#include<iostream>#include<string>using namespace std;void main(){ string LyuS = "W ...
- Spring注解(赋值相关)
上面是与生命周期有关的内容,下面是属性赋值相关的: @Configuration public class ProperTyValueConfig { @Bean public Person pers ...
- tomcat常用配置详解和优化方法
tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...
- caffe python lmdb读写
caffe中可以采取lmdb健值数据库的方式向网络中输入数据. 所以操作lmdb就围绕"键-值"的方式访问数据库就好了. Write 我们可以采用cv2来读入自己的图像数据,采用d ...
- 织梦导航 currentstyle 点击li添加class类 样式
<!--导航开始--> <div class="global_nav_wrap"> <ul class="nav nav-pills&quo ...