• 0
  • 0
分享
  • 使用Selenium进行web自动化测试——软件测试圈
  • 饭团🍙 2021-07-08 13:41:23 字数 4350 阅读 1362 收藏 0

1、Selenium简介

Selenium Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。

Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Google Chrome、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Net、Java、Perl等不同语言的测试脚本。

2、Selenium+Visual Studio环境配置

先到官网先下载IEDriverServer(32位或者64位),解压文件将IEDriverServer.exe存放到一个指定路径,要记住这个路径,配置过程中要用到。(http://docs.seleniumhq.org/download/ )

如果使用chrome,对应的驱动文件是chromedriver.exe,也是需要把chromedriver.exe存放到指定路径。(http://chromedriver.storage.googleapis.com/index.html)

如果是火狐浏览器,对应的驱动文件是geckodriver.exe,同样也是需要把geckodriver.exe存放到指定路径。(http://tv.cctv.com/live/)

打开VS(为了便于查看,我用的是中文版的,英文版的请自己对照位置),打开“工具”菜单下的“扩展管理器”:

我们需要在“扩展管理器”中安装“NuGet”,单击下载安装,然后重启你的VS。

创建一个测试项进行测试

右键“引用”,选择“NuGet程序包”。

在这里选择“联机”,搜索“selenium”。然后安装就行了。

安装Selenium包后项目引用里可看到如下动态库

创建一个测试类进行环境验证(注意到“C:\IEDriverServer”了吗?这就是存放IEDriverServer.exe的路径)

可能遇到的问题:

1):未找到驱动服务

参考方案: 就看看IEDriverServer.exe的路径是不是错了。 另外:浏览器的“启动保护模式”我给取消勾选了,如果勾选的话偶尔也会报异常。

2):用户代码未处

参考方案: 看看是不是浏览器的驱动用错了(32位用了64位的,或者反过来)。

3、Selenium—页面元素定位

By.className(className))
By.cssSelector(selector)
By.id(id)
By.linkText(linkText)
By.name(name)
By.partialLinkText(linkText)
By.tagName(name)
By.xpath(xpathExpression)

注意:

selenium-webdriver通过findElement()\findElements()等find方法调用"By"对象来定位和查询元素。

By类只是提供查询的方式进行分类。findElement返回一个元素对象否则抛出异常,findElements返回符合条 件的元素List,如果不存在符合条件的就返回一个空的list。

各方法使用优先级为:id,name,linktext优先使用,cssselector次之,最后使用xpath。

4、Selenium自动化--对象操作

1):点击按钮/链接click()

Driver.FindElement(By.XPath(“//input[@id=‘submit’ and @value=‘下一步’]”)).click();

2):清空文本框clear()

Driver.FindElement(By.Id(“tranAmtText”)).clear();

3):在文本框中输入指定的字符串sendkeys()

Driver.FindElement(By.Id("tranAmtText")).SendKeys(“123456”);

4):移动光标到指定的元素上perform

Actions action=new Actions(driver);
action.MoveToElement(Find(By.XPath("//input[@id='submit' and @value='确定']"))).Perform();

5):模拟光标晃动movebyoffset()

Actions action = new Actions(driver);
action.MoveByOffset(2, 4);

6):等待页面元素加载完成,默认等待100秒

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
//等待页面上ID属性值为submitButton的元素加载完成
wait.Until((d) => { return WaitForObject(By.Id("submitButton")); });

5、Selenium自动化—操作下拉框

Select操作//选择下拉框

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();
}
}

6、Selenium自动化—操作iframe

1):切换焦点到id为固定值的iframe上

进入页面后,光标默认焦点在DefaultContent中,若想要定位到iframe 需要转换焦点

driver.SwitchTo().DefaultContent();
//切换焦点到mainFrame
driver.SwitchTo().Frame("mainFrame");

需要注意的是:切换焦点之后若想切换焦点到其他iframe上 需要先返回到defaultcontent,再切换焦点到指定的iframe上。

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];
}
}
}

7、Selenium自动化—alert prompt confirm

//在本次浏览器兼容性测试项目中遇到的只有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();
}
}

8、Selenium自动化—浏览器操作

首先生成一个Web对象

WebDriver driver = new FirefoxDriver();
//打开指定的URL地址
driver.Navigate().GoToUrl(@"http://doctor.guahao.com");
//关闭浏览器
Driver.quit();
//获取所有的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);


作者:诺-nuo

原文链接:https://blog.csdn.net/sinat_16689259/article/details/67649150#comments_17254624

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • selenium简介介绍  Selenium [1]  是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。功能框架底层使用JavaScript模拟真实用...
            1 1 1240
            分享
          • 最近趁摸鱼时间体验了一款神器,堪称后端前端们的摸鱼加速器,测试们的寿命催化剂。那就是:Apifox。中国自主研发的集文档、接口调试、Mock、接口自动化测试一体的协作平台。一套系统、一份数据,可解决多个系统之间的数据同步问题。定义好接口文档,则接口调试、数据Mock、接口测试就可以直接使用,无需再次定义;接口文档和接口开发调试也可以同一个工具,接口调试完成后即可保证和接口文档定义完全一致。高效、及时、准确!已有的API工具,例如postman,fiddler等,虽然功能也很强大,但是食用起来还是比较的繁琐,面对少量的接口还好说,要是面对大量的接口,需要耗费一定时间和精力去分门别类建立规范文档,...
            0 0 1334
            分享
          •   背景  事件的起因在于老板最近的两次“故障”,一次去年的,一次最近。共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用。  最神奇的是,事后多次 Code Review,结果还是没有发现任何能够导致该问题的 bug,最后推测有可能是服务器在发布打包的时候出了问题。  当老板第 N + 1 次吐槽因为他写的工程化工具领来的天外飞锅,我突然思考起来,如何才能避免这种天外飞锅。  归根结底,导致这类线上故障的原因都是在于打包上线的代码没有经过验证。针对这个问题,有两种方法可以解决:  治本  由于请求地址不同,预发(测试)版本不可直接发线上,而线上版本缺少了上线之前的验证过程。所...
            0 0 753
            分享
          •   接口测试流程及用例设计  接口测试是整项目测试过程中非常重要的一环,测试的对象是接口,所以可以很早的介入测试,对代码逻辑进行全面验证,更早的发现程序的问题,比UI测试效率更高,并且更容易验证极端和异常的情况。  接口测试流程:  类似于功能测试流程,一个完整的接口测试流程如下:  1. 分析接口文档和需求文档  2. 编写接口测试计划  3. 编写接口测试用例  4. 接口测试执行  5. 输出接口测试报告。  一般接口用例设计依据的就是开发提供的接口文档和产品需求文档,首先认识一下接口文档。  接口文档  接口文档如何描述一个具体的接口信息,示例如下:接口文档  主要包括如下几个部分: ...
            0 0 964
            分享
          • 近日界面新闻了解到,丰巢智能柜小程序已专门辟出“生活服务”专区,为丰巢进军的洗衣业务打起了广告。据丰巢方面透露,目前这一服务已经从深圳拓展至全国市场,但仍处于摸索阶段。快递柜作为物流最后一公里的服务形态之一,正与驿站产生竞争。但无论是快递柜还是驿站,目前都面临服务业态相对单一、投入成本较大的问题,盈利情况并不理想。根据丰巢智能柜小程序的信息,“丰巢洗护”服务内容包括衣物、鞋靴的通用洗护,以及干洗、水洗等专业分类洗护。这一定程度上增加了快递柜使用的场景。在使用“丰巢洗护”这一功能时,用户可以通过丰巢小程序下单,选择通过“投丰巢柜”和“上门取件”任一完成配送,之后等待衣物返还即可。其中“投丰巢柜”...
            0 0 775
            分享
      • 51testing软件测试圈微信