使用Selenium WebDriver驱动浏览器测试的过程中多多少少会遇到一些折腾人的问题,总结了一部分,做下分享。

一、隐藏元素处理(element not visible)

使用WebDriver点击界面上被隐藏的元素时,使用默认的IWebElement.Click()方法可能无法触发Click事件,这时的修改方案可以采用执行JS的方式来实现。

IWebElementwebElement = driver.FindElement(By.Id(elementId));

IJavaScriptExecutorjs = driverasIJavaScriptExecutor;

js.ExecuteScript("arguments[0].click();",webElement);

二、页面跳转后找不到元素(no such element)

页面跳转获取新页面的元素需要时间,所以需要在跳转后增加等待时间,最通用的方法是判断在某个时间内元素是否加载完成。

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

三、屏蔽动画

如果网站使用了JQuery的动画效果,我们在运行测试的时候可以disable JQuery的animation,代码如下:

IJavaScriptExecutorjs = driverasIJavaScriptExecutor;

js.ExecuteScript("jQuery.fx.off=true");

四、不确定出现的元素处理

有的网站首次访问时会弹出广告,第二次访问则不再显示,这种情况可以自己调用WebDriver的IsElementPresent(Byby)方法进行判断

if(IsElementPresent(Byby)))

{

driver.FindElement(by).Click();

}

五、Cookie登录

自动化测试中,许多地方要求登录,cookie能够实现不必每次输入用户名和密码进行登录。

Cookiecookie =newCookie(name,value,domain,path,expires);

driver.Manage().Cookies.AddCookie(cookie);

说明:参数分别为Cookie的名称,内容,域,路径,过期时间。

六、图片上传

参考:《Selenium(C#)实现图片上传的两种方式

七、带placeholder属性的输入框Clear无效(invalid element state)

自动测试时,会出现某些带有默认值的输入框Clear()方法报错,错误提示:invalid element state: Element is not currently interactable and may not be manipulated,此时需要检查下输入文本框是否带有placeholder属性,如果有则直接略过Clear方法,原因如下:

placeholder定义和用法

placeholder属性提供可描述输入字段预期值的提示信息(hint)。

该提示会在输入字段为空时显示,并会在字段获得焦点时消失。

八、切换窗口

参考《WebDriver(C#)之窗口切换

foreach(stringwinHandleindriver.WindowHandles)  //遍历当前打开的窗口

{

driver.SwitchTo().Window(winHandle);

if(driver.Title.Contains(title)) //title是新窗口的Title

{

break;

}

}

九、Iframe元素定位

如果一个页面是一个html元素,只有一个head,一个body,使用driver.FindElement()可以查找页面中任何一个元素。但是,页面中如果嵌入<frame…../>是的页面包含多个html元素,这种情况下就先要定位到元素所在的frame,然后再查找对应的元素,代码如下:

IWebElementframe. = driver.FindElement(By.XPath(".//*[@id='form1']/div[1]/div[1]/iframe"));

driver.SwitchTo().Frame(frame);

十、Firefox代*理设置

WebDriver每次启动一个Firefox的实例时,会生成一个匿名的profile,并不会使用当前Firefox的profile。所以如果要访问需要通过代*理的web服务,直接设置Firefox的代*理是没用的,因为WebDriver启动的Firefox不会使用该profile,需要在代码里设置FirefoxProfile属性,或者直接调用默认的profile。

publicIWebDriverProxyConfig()

{

FirefoxProfilefirefoxProfile =newFirefoxProfile();

firefoxProfile.SetPreference("network.proxy.type",1);

firefoxProfile.SetPreference("network.proxy.http","192.168.1.11");

firefoxProfile.SetPreference("network.proxy.http_port",8888);

firefoxProfile.SetPreference("network.proxy.no_proxies_on","");

returnnewFirefoxDriver(firefoxProfile);

}

或者启动默认的profile

stringpath =@"C:\Users\username\AppData\Local\Mozilla\Firefox\Profiles\a8xlln4m.default";

FirefoxProfileffprofile =newFirefoxProfile(path);

driver =newFirefoxDriver(ffprofile);

【转载】WebDriver(C#)之十点使用心得的更多相关文章

  1. [转载]WebDriver工作原理

    转载自:https://www.cnblogs.com/testermark/p/3546287.html WebDriver的工作原理:  在我们new一个WebDriver的过程中,Seleniu ...

  2. [转载] 关于matlab GUI的一点心得

    转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行 ...

  3. 转载:看c++ primer 学习心得

    学习C++ Primer时遇到的问题及解释 chenm91 感觉: l          啰嗦有时会掩盖主题:这本书确实有些啰嗦,比如在讲函数重载的时候,讲了太长一大段(有两节是打了*号的,看还是不看 ...

  4. 【Python开发】网页爬取心得

    转载:python 爬虫抓取心得分享 title:python 爬虫抓取心得分享 0x1.urllib.quote('要编码的字符串')如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以 ...

  5. df、du、fdisk:Linux磁盘管理三板斧的使用心得(转载)

    From:http://os.51cto.com/art/201012/240726_all.htm 作者介绍:李洋(博客),博士毕业于中科院计算所.10多年来一直从事计算机网络信息安全研发工作,曾主 ...

  6. 转载 基于Selenium WebDriver的Web应用自动化测试

    转载原地址:  https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...

  7. 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

    转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...

  8. 【转载】Selenium WebDriver的简单操作说明

    转载自:http://blog.csdn.net/xiao190128/article/details/49784121 1.打开一个测试浏览器 对浏览器进行操作首先需要打开一个浏览器,接下来才能对浏 ...

  9. Selenium Webdriver元素定位的八种常用方式(转载)

    转载自 https://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或 ...

随机推荐

  1. 【bzoj4428】[Nwerc2015]Debugging调试 数论+记忆化搜索

    题目描述 一个 $n$ 行的代码出了bug,每行都可能会产生这个bug.你要通过输出调试,在其中加入printf来判断bug出现的位置.运行一次程序的时间为 $r$ ,加入一条printf的时间为 $ ...

  2. 除了GPS外的4种获得用户地理位置数据的方法

    纯粹的GPS解决方案以及它所生成的经纬度标签是地理位置数据的公认标准.但是至少还有4种方法可以获得地理位置数据: 1.手机信号塔数据:当移动设备的GPS芯片不能接收到GPS信号时,移动设备就需要与它所 ...

  3. Qin Shi Huang's National Road System UVA - 1494(次小生成树)

    秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度 ...

  4. (转)linux下压缩和归档相关命令tar,zip,gzip,bzip2

    压缩包也有两种形式,一种是tar.gz包(.tgz包也是这种),一种是tar.bz2包. tar.gz包的解压方法:tar zxvf [PackageName].tar.gz tar.bz2包的解压方 ...

  5. Docker学习笔记五:Docker生成jenkins容器,支持Java Web项目持续集成、持续部署

    一.创建jenkins容器: 1.拉取jeknin镜像 sudo docker pull jenkins 2.创建一个jenkins目录 sudo mkdir /jenkins 3.在jenkins目 ...

  6. SID(安全标识符)

    creating a SID for the Everyone group. DWORD SidSize; PSID TheSID; LPTSTR p; SidSize = SECURITY_MAX_ ...

  7. Hive(二)hive的基本操作

    一.DDL操作(定义操作) 1.创建表 (1)建表语法结构 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type ...

  8. [CodeVs1515]跳(lucas定理+费马小定理)

    嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C ...

  9. Codeforces Round #305 (Div. 2) D 维护单调栈

    D. Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  10. Linux常用网络工具:路由扫描之mtr

    除了上一篇<Linux常用网络工具:路由扫描之traceroute>介绍的traceroute之外,一般Linux还内置了另一个常用的路由扫描工具mtr. mtr在某些方面比tracero ...