(转).net下Selenium2使用方法总结
一、Selenium简介
1.Selenium1(Selenium RC) Selenium2(Selenium WebDriver) Selenium2.0 = Selenium1.0 + WebDriver(也就是说Selenium2.0合并了这两个项目)
2.WebDriver支持 Firefox (FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver) 和Chrome (ChromeDriver)
二、日常使用方法总结
1.生成一个web对象
IWebDriver driver;
driver = new FirefoxDriver();
2.跳转到指定页面
driver.Navigate().GoToUrl(baseURL + "/");
driver.title 取得当前页的title
driver.url 取得当前页的url
3.执行js脚本
((IJavaScriptExecutor) driver).ExecuteScript("js")
4.定位元素
driver.FindElement(By.Id("cp1_btnModify"))
By.ClassName(className))
By.CssSelector(selector)
By.Id(id)
By.LinkText(linkText)
By.Name(name)
By.PartialLinkText(linkText)
By.TagName(name)
By.Xpath(xpathExpression)
5.定位frame中元素
(1)进入frame
driver.SwitchTo().Frame("frame");
(2)定位元素
driver.FindElement(By.Id("div1"));
driver.FindElement(By.Id("input1"));
(3)退出frame
driver.SwitchTo().DefaultContent();
6.如何得到弹出窗口
(1)当前窗口的句柄
driver.CurrentWindowHandle
(2)所有窗口的句柄
driver.WindowHandles
(3)根据句柄得到窗口
if driver.CurrentWindowHandle=driver.WindowHandles[i]
IWebDriver window=driver.SwitchTo().Window(driver.WindowHandles[i])
(4)根据窗口得到title,url
window.Title
window.Url
7.如何处理alert、confirm、prompt对话框
(1)取得alert框信息
Html代码:
<input id = "alert" value = "alert" type = "button" onclick = "alert('欢迎!请按确认继续!');"/>
driver.FindElement(By.Id("alert")).Click();
IAlert alert = driver.SwitchTo().Alert();
Console.WriteLine(alert.Text);
confirm.Dismiss(); //点弹框关闭
(2)取得输出对话框上面的文字
Html代码:
<input id = "confirm" value = "confirm" type = "button" onclick = "confirm('确定吗?');"/>
driver.FindElement(By.Id("confirm")).Click();
IAlert confirm = driver.SwitchTo().Alert();
Console.WriteLine(confirm.Text);
confirm.Accept(); //点击确定
(3)点击按钮,输入名字,然后点击确认
Html代码:
<input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('请输入你的名字:','请输入
你的名字'); document.write(name) "/>
driver.FindElement(By.Id("prompt")).Click();
IAlert prompt = driver.SwitchTo().Alert();
Console.WriteLine(prompt.Text);
prompt.SendKeys("Hello");
prompt.Accept(); //点击确定
8.如何来处理select下拉框
SelectElement selectCity=new SelectElement(driver.FindElement(By.Id("City")));
(1)通过下拉框的索引选中第二项
selectCity.SelectByIndex(2);
(2)通过下拉列表中的选项的value属性选中
selectCity.SelectByValue("10");
(3)通过下拉列表中的选项的Text属性选中
selectCity.SelectByText("北京");
(4)遍历一下下拉列表所有选项,用click进行选中选项
foreach(IWebElement e in selectCity.Options)
{
e.Click();
}
9.如何操作cookie
(1)增加一个name = "name",value="value"的cookie
Cookie cookie=new Cookie("name","value");
driver.Manage().Cookies.AddCookie(cookie);
(2)得到页面下所有的cookies,输入它的所在域、name、value、有效日期、路径
ICookieJar cookies=driver.Manage().Cookies;
Cookie co = cookies.GetCookieNamed("name");
Console.WriteLine(co.Domain);
Console.WriteLine(co.Name);
Console.WriteLine(co.Value);
Console.WriteLine(co.Expiry);
Console.WriteLine(co.Path);
(3)删除cookie三种方法
a)通过cookie的name
driver.Manage().Cookies.DeleteCookieNamed("CookieName");
b)通过cookie对象
driver.Manage().Cookies.DeleteCookie(cookie);
c)全部删除
driver.Manage().Cookies.DeleteAllCookies();
10.如何等待页面元素加载完成
(1)明确等待
(2)隐形等待
11.如何利用Selenium-webdriver截图
Thread.Sleep(5000);
Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot();
screenShotFile.SaveAsFile("test",ImageFormat.Jpeg);
12.如何取得table中的内容
(1)通过行得到列的方法
private IWebElement GetCell(IWebElement row,int cell)
{
IList<IWebElement> cells;
IWebElement target = null;
//列里面有"<th>"、"<td>"两种标签,所以分开处理
if(row.FindElements(By.TagName("th")).Count>0)
{
cells = row.FindElements(By.TagName("th"));
target = cells[cell];
}
if(row.FindElements(By.TagName("td")).Count>0)
{
cells = row.FindElements(By.TagName("td"));
target = cells[cell];
}
return target;
}
(2)通过By得到行的方法
public String GetCellText(By by,String tableCellAddress)
{
//得到table元素
IWebElement table = driver.FindElement(by);
//对所要查找的单元格位置字符进行分解,得到对应的行、列
int index = tableCellAddress.Trim().IndexOf('.');
int row = Convert.ToInt32(tableCellAddress.Substring(0, index));
int cell = Convert.ToInt32(tableCellAddress.Substring(index + 1));
//得到table表中所有行对象,并得到所要查询的行对象
IList<IWebElement> rows = table.FindElements(By.TagName("tr"));
IWebElement theRow = rows[row];
return GetCell(theRow, cell).Text;
}
(3)通过参数得到对应行列的内容
Console.WriteLine(GetCellText(By.Id("mytable"),"0.2")); //得到id="mytable"中的第一行第三列的表格内容
(转).net下Selenium2使用方法总结的更多相关文章
- svn服务器地址变换以后,mac下的处理方法
svn服务器地址变换之后,mac下的处理方法 svn服务器地址变换之后,mac下的处理方法 1.进入终端,进入项目所在的文件夹下: cd 项目位置/ 2.查看svn信息 svn info 3.输出结果 ...
- 重写类的Equals以及重写Linq下的Distinct方法
当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...
- opencv直线检测在c#、Android和ios下的实现方法
opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...
- DAY2 Python 标准库 -> Getpass 模块 -> 命令行下输入密码的方法.
getpass 模块 getpass 模块提供了平台无关的在命令行下输入密码的方法. getpass(prompt) 会显示提示字符串, 关闭键盘的屏幕反馈, 然后读取密码. 如果提示参数省略, 那么 ...
- 第一零三天上课 PHP TP框架下控制器的方法分离
(1)配置信息 修改配置文件->Config.php (配置后,原先的控制方法无效) 'ACTION_BIND_CLASS' => TRUE, // 控制器方法分离 (2)在Control ...
- Linux下软件安装方法即路径设置
Linux下软件安装方法即路径设置 http://www.cnblogs.com/edward259/archive/2010/07/02/1770066.html
- 拿到内存中dom元素的最后样式进行修改obj下的currentStyle方法
在用dom操作在对页面中的<style></style>里的样式进行操作时,发现时无效的,我觉得是因为页面DOM解析时此标签的样式内容才会被读到内存中,因此JS操作时取不到此标 ...
- (转载)EhLib 在 Delphi 7 下的安装方法
EhLib 在 Delphi 7 下的安装方法 1.将 EhLib 解压到一个目录,如:E:\VCL\EhLib: 2.将 EhLib 安装目录下 Common 目录.DataService 目录下的 ...
- java中获取项目在tomcat目录下的路径方法
HttpServletRequest request //获取的是ROOT项目在tomcat下的路径 方法1: String path = request.getSession().getServle ...
随机推荐
- ios 字符串的操作汇总
//将NSData转化为NSString NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8S ...
- CURL访问url显示响应时间
curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.baidu.com 时间指 ...
- Foundations of Computer Science
1, Iteration, Induction and Recursion 2, the running time of program 3, combinatorics and probabilit ...
- table可更改th大小的jQuery插件
(function ($) { $.fn.resizetable = function () { var tableObj = $(this); var inResizeRange = false; ...
- xtrabackup 2.0.8备份mysql5.1.65报错
sh : xtrabackup not found innobackupex: fatal error: no 'mysqld' group in MySQL options fix: add inn ...
- Oracle Day2 过滤、排序、单行函数
1.过滤和排序 SQL> --查询10号部门的所有员工信息 SQL> select * from emp ; 未选定行 SQL> ed SP2: 无法创建保存文件 "afi ...
- 多线程synchronized用例解析
当用synchronized来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.即使在执行过程中,CPU切换到别的线程了,因为有锁的缘故,其他线程也不会进来执行代码,而 ...
- 《TCP/IP详解》读书笔记
本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层 一.整体概念 1.各层协议的关系,只讨论四层 各层常见的协议: 网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...
- LeetCode OJ 217.Contains Duplicate
Given an array of integers, find if the array contains any duplicates. Your function should return t ...
- vertor容器
头文件#include<vector> 1.创建vector对象 1.不指定容器大小 vector <int> v; 2.指定容器大小 vector <double&g ...