Selenium Webdriver 自动化测试开发常见问题(C#版)
转一篇文章,有修改,出处http://www.7dtest.com/site/blog-2880-203.html
1:Selenium中对浏览器的操作
首先生成一个Web对象
IWebDriver driver = new FirefoxDriver();
//打开指定的URL地址
driver.Navigate().GoToUrl(@"http://12.99.102.196:9080/corporbank/logon_pro.html");
//关闭浏览器
Driver.quit();
网银浏览器兼容性测试过程中,关闭浏览器后会有对话框,此问题解决方法如下:
public void logout()
{
System.Diagnostics.Process[] myProcesses;
myProcesses = System.Diagnostics.Process.GetProcessesByName("IEXPLORE");
foreach (System.Diagnostics.Process instance in myProcesses)
{
instance.Kill();
}
}
2:Selenium中执行JS 脚本
//需要将driver强制转换成JS执行器类型
((IJavaScriptExecutor) driver).ExecuteScript("js文件名");
3:Selenium中定位页面元素
driver.FindElement(By.Id("cp1_btnModify")).click();
By.ClassName(className));
By.CssSelector(selector) ;
By.Id(id);
By.LinkText(linkText);
By.Name(name);
By.PartialLinkText(linkText);
By.TagName(name);
By.Xpath(xpathExpression);
3.1根据元素id定位并操作
//向指定的文本框输入字符串500001
Driver.FindElement(By.Id("amount")).SendKeys("500001");
3.2根据元素classname定位并操作
//点击classname为指定值的按钮
Driver.FindElement(By.ClassName(“WotherDay”)).click();
3.3根据元素的linktext定位并操作
Driver.FindElement(By.LinkText(“选择账号”)).click();
3.4根据元素的Name定位并操作
Driver.FindElement(By.Name(“quality”)).perform();
3.5使用CssSelector定位并操作
string order = "#resultTable.result_table tbody tr.bg1 td.center a";
driver.FindElement (By.CssSelector(order)).click();
3.6使用Xpath定位并元素并操作
//使用多个属性定位元素
Driver.FindElement(By.XPath("//input[@id='submit' and @value='下一步']")).click();
//使用绝对路径定位元素
string path = "/html/body/div[4]/div/div/div[2]/table/tbody/tr/td/a";
Driver.FindElement(By.Xpath(path)).click();
各方法使用优先原则:
优先使用id,name,classname,link;次之使用CssSelector();最后使用Xpath();
因为Xpath()方法的性能和效率最低下。
4:Selenium中清空文本框中的默认内容
//清空文本框clear()
Driver.FindElement(By.Id("tranAmtText")).clear();
5:Selenium中在指定的文本框中输入指定的字符串
//在文本框中输入指定的字符串sendkeys()
Driver.FindElement(By.Id("tranAmtText")).SendKeys(“123456”);
6:Selenium中移动光标到指定的元素上
//移动光标到指定的元素上perform
Actions action=new Actions(driver);
action.MoveToElement(Find(By.XPath("//input[@id='submit' and @value='确定']"))).Perform();
7:Selenium中点击按钮/链接
//点击按钮/链接click()
Driver.FindElement(By.XPath("//input[@id='submit' and @value='下一步']")).click();
8:Selenium中等待页面上的元素加载完成
//等待页面元素加载完成
//默认等待100秒
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
//等待页面上ID属性值为submitButton的元素加载完成
wait.Until((d) => { return WaitForObject(By.Id("submitButton")); });
9:Selenium中模拟鼠标晃动
//模拟光标晃动movebyoffset()
Actions action = new Actions(driver);
action.MoveByOffset(2, 4);
10:Selenium中对iframe中元素的定位
5.1:切换焦点到id为固定值的iframe上
进入页面后,光标默认焦点在DefaultContent中,若想要定位到iframe 需要转换焦点
driver.SwitchTo().DefaultContent();
//切换焦点到mainFrame
driver.SwitchTo().Frame("mainFrame");
需要注意的是:切换焦点之后若想切换焦点到其他iframe上 需要先返回到defaultcontent,再切换焦点到指定的iframe上。
5.2切换焦点到id值为动态值的iframe上
有时候 页面上浮出层的id为动态值,此时需要先获取所有符合记录的iframe放置在数组中,然后遍历数组切换焦点到目标iframe上。
如下方法:
protected string bizFrameId = string.Empty;
protected string bizId = string.Empty;
//获取动态iframe的id值
protected void SetIframeId()
{
ReadOnlyCollection<IWebElement> els = driver.FindElements(By.TagName("iframe"));
foreach (var e in driver.FindElements(By.TagName("iframe")))
{
string s1 = e.GetAttribute("id");
if (s1.IndexOf("window") >= 0 && s1.IndexOf("content") >= 0)
{
bizFrameId = e.GetAttribute("id");
string[] ss = s1.Split(new char[] { '_' });
bizId = ss[1];
}
}
}
11:Selenium中关闭多个子Browser窗口
//获取所有的WindowHandle,关闭所有子窗口
string oldwin = driver.CurrentWindowHandle;
ReadOnlyCollection<string> windows = driver.WindowHandles;
foreach (var win in windows)
{
if (win != oldwin)
{
driver.SwitchTo().Window(win).Close();
}
}
driver.SwitchTo().Window(oldwin);
12:Selenium中对下拉框的操作
//选择下拉框
protected void SelectUsage(string selectid, string text)
{
IWebElement select = Find(By.Id(selectid));
IList<IWebElement> AllOptions = select.FindElements(By.TagName("option"));
foreach (IWebElement option in select.FindElements(By.TagName("option")))
{
if (option.GetAttribute("value").Equals(text))
option.Click();
}
}
13:Selenium中对confirm ,alert ,prompt的操作
//在本次浏览器兼容性测试项目中遇到的只有confirm和alert
//下面举例说明confirm和alert的代码,prompt类似
//confirm的操作
IAlert confirm = driver.SwitchTo().Alert();
confirm.Accept();
//Alert的操作
//个人网银中同样的业务有时候不会弹对alert,此时需要判断alert是否存在
//对Alert提示框作确定操作,默认等待50毫秒
protected void AlertAccept()
{
AlertAccept(0.05);
}
//等待几秒,可以为小数,单位为秒
protected void AlertAccept(double waitseSonds)
{
double nsleepMillon = waitseSonds * 1000;
int k=0;
int split=50;
IAlert alert = null;
do
{
k++;
Thread.Sleep(split);
alert = driver.SwitchTo().Alert();
} while (k * split <= nsleepMillon || alert==null);
if (alert != null)
{
alert.Accept();
}
}
14:Selenium WebDriver的截图功能
//WebDriver中自带截图功能
Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot();
screenShotFile.SaveAsFile("test",ImageFormat.Jpeg);
PS:文中没提到Page Object Design Model,之后补上。
Selenium Webdriver 自动化测试开发常见问题(C#版)的更多相关文章
- selenium webdriver自动化测试
selenium家族介绍 Selenium IDE:Selenium IDE是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能. Selenium ...
- python + selenium webdriver 自动化测试 之 环境异常处理 (持续更新)
1.webdriver版本与浏览器版本不匹配,在执行的时候会抛出如下错误提示 selenium.common.exceptions.WebDriverException: Message: unkno ...
- Selenium & Webdriver 远程测试和多线程并发测试
Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...
- selenium webdriver (python) 第二版
前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...
- selenium webdriver (python) 第三版
感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...
- Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通
Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...
- 转载 基于Selenium WebDriver的Web应用自动化测试
转载原地址: https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...
- 【自动化测试&爬虫系列】Selenium Webdriver
文章来源:公众号-智能化IT系统. 一. Selenium Webdriver技术介绍 1. 简介 selenium Webdriver是一套针对不同浏览器而开发的web应用自动化测试代码库.使用这套 ...
- Selenium WebDriver屏幕截图(C#版)
Selenium WebDriver屏幕截图(C#版)http://www.automationqa.com/forum.php?mod=viewthread&tid=3595&fro ...
随机推荐
- python 读csv数据 通过改变分隔符去掉引号
import csv with open(r'C:\Temp\ff.csv') as f: f_csv=csv.reader(f,delimiter='\t') headers=next(f_csv) ...
- jsp无法访问
一直无法访问jsp: 由于Spring boot使用的内嵌的tomcat,而内嵌的tamcat是不支持jsp页面的,所有需要导入额外的包才能解决. <!-- 解决jsp无法访问 --> & ...
- react+redux+react-router+node.js 开发实时聊天App 学习记录
一.课程导学 1.React 主要解决的是UI层的问题,应用的状态需要借助Redux等状态管理. 2.前端React + antd-mobile UI组件库 + Redux 状态管理库 + Rea ...
- GUI界面相应事件
function varargout = GUI19(varargin) % GUI19 MATLAB code for GUI19.fig % GUI19, by itself, creates a ...
- Codeforce 697A - Pineapple Incident
Ted has a pineapple. This pineapple is able to bark like a bulldog! At time t (in seconds) it barks ...
- bc 命令
bc命令是一种支持任意精度的交互执行的计算器语言.是Linux简单的计算器,能进行进制转换与计算.能转换的进制包括十六进制.十进制.八进制.二进制等.可以使用的运算符号包括(+)加法.(-)减法.(* ...
- Inferred type 'S' for type parameter 'S' is not within its bound;
在使用springboot 方法报错: Inferred type 'S' for type parameter 'S' is not within its bound; should extends ...
- 图片转化成base64字符串
package demo; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; public ...
- codeSourcery交叉编译环境
arm-none-Linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括 ...
- mysql执行计划查看工具explain
在优化sql语句时,我们经常会用到explain语句,这里对explain语句做一个详细的总结说明. The EXPLAIN statement provides information about ...