(转).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 ...
随机推荐
- Hadoop作业优化
mapper数量 reduce数量 combiner 中间值压缩 自定义序列 调整shuffle,减少溢出写 关闭推测执行 任务JVM重用 慢启动reduce
- C#代码实现把网页文件保存为mht文件
MHT叫“web单一文件”.顾名思义,就是把网页中包含得图片,CSS文件以及HTML文件全部放到一个MHT文件里面.而且浏览器可以直接读取得. 由于项目需要,需实现把指定的网页文件保存为mht文件.于 ...
- 基于Flash与window平台本地程序通信实现媒体流发布
0 Web场景下的媒体流发布可以采用Flash原生API实现,但是Flash H264视频压缩参数不可控.音频无法AAC编码,所以一般采用浏览器插件方式,但是浏览器插件有版本兼容问题.不稳定,所以可以 ...
- Dash:程序员的好帮手
Dash 关于Dash是什么.有哪些功能以及该怎么使用,我想直接引用咖啡 生活 美女蛇,这位小伙伴整理的很详细,我这里只说一下Dash的破解方法. 破解 破解补丁下载:Dash3.x_Cracked ...
- perl中的pack与unpack
这个pack, unpack在 "perl语言编程" 有介绍 看起来很复杂 #把一个字符串转为十六进制格式 my $source = 'abcd'; unpack('H*', $s ...
- perl Socket接收超时设置
一般来说, IO::Socket::INET里的Timeout设置是对于conncet的 如果你想设置recv接收超时, 可以这样设置: usr Socket: ...... , )); #注意这里p ...
- 十六、oracle 索引
一.管理索引-原理介绍索引是用于加速数据存取的数据对象.合理的使用索引可以大大降低i/o次数,从而提高数据访问性能.索引有很多种我们主要介绍常用的几种:为什么添加了索引后,会加快查询速度呢? 二.创建 ...
- Activity之间的隐士跳转
/** * 方法一:在构造函数中指定 */ /*Intent intent=new Intent(this,TwoActivity ...
- eclipse代码提示优化
用Eclipse编写Android程序的代码提示功能主要是在java和xml文件中,有时候会失效,默认的提示功能有限. 1)java文件自动提示 Window->Preferences ...
- java操作cookies
建立一个无生命周期的cookie,即随着浏览器的关闭即消失的cookie,代码如下 HttpServletRequest request HttpServletResponse response Co ...