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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 【摘要】测试用例英文名叫Testcase,测试用例是开展测试工作的重要一项,测试用例是否完善、质量高低以及执行的情况如何是影响软件测试结果的一个重要方面。可以说测试用例是软件测试中一个举足轻重的因素。本文就有关问题进行阐述。【关键词】测试用例概述用例文档(checklist),是关于具体测试步骤的文档,它描述了测试的输入参数、条件及配置、预期的输出结果等,以判断被测软件的工作是否正常。从表现形式上而言,测试用例可以是纯文本的说明文档,也可以是用脚本语言或高级语言编写的一段代码。测试用例文档由简介和测试用例两部分组成。简介部分编制测试目的、测试范围、定义术语以及测试背景等。测试用例部分逐一列示各...
            1 1 1712
            分享
          •   马克-扎克伯格(Mark Zuckerberg)并不吝啬分享他对苹果公司产品或战略的看法,同时还不断强调苹果公司和 Meta 公司之间相互竞争的愿景。在最近的一次采访中,这个话题再次被提起,扎克伯格毫不避讳地分享了他的观点,即他的公司与蒂姆-库克的公司在本质上是完全不同的。他甚至还批评了苹果公司的产品开发方法。  马克-扎克伯格在一次采访中强调,Meta 实际上与苹果截然相反,并着重介绍了他的公司如何为创新提供空间。  虽然苹果和 Meta 的产品线不同,但 Meta Quest 和 Vision Pro 一直是竞争对手,两家公司之间形成了竞争的氛围。马克-扎克伯格(Mark Zucker...
            0 0 415
            分享
          • 软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复查,是软件质量保证的关键步骤。定义1:软件测试是为了发现错误而在规定的条件下执行程序的过程。定义2:软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。由软件测试的定义,不难看出测试的目的,是寻找错误,并且是尽最大可能找出最多的错误。著名的Grenford J. Myers在《The Art of Software?Testing》一书中提出以下观点:测试是程序的执行过程,目的在于发现错误;一个好的测试用例在于发现...
            12 12 2145
            分享
          • 接口测试和功能测试虽然都属于软件测试的范畴,但两者的测试目的、测试内容和测试重点都有所不同。那今天我将接口测试和功能测试配合实例为大家介绍这两种测试的区别,以 Apifox 这个最近风头很大的接口测试软件进行讲解。一、测试目的不同接口测试的目的是测试应用程序的接口是否能够按照规范要求与其他系统或组件进行交互,以及在不同负载条件下接口的稳定性、性能和安全性。功能测试的目的则是为了确保应用程序的功能符合规格说明书或需求文档中的规定。Apifox 是一个在线接口测试平台(但其实也有桌面端啦),它的主要目的是为了帮助测试人员快速创建和执行接口测试用例,验证接口的正确性和稳定性。通过使用 Apifox,...
            0 0 994
            分享
          • 1、Android APP 内存不足时, 系统如何结束进程获得内存?答:系统优先结束被挂起(暂停)的进程,释放内存2、APP 测试常见的严重问题有哪些? 分别引起的原因有哪些?答:常见的有 crash、ANR(应用无响应、卡死),一般由设备碎片化、网络波动大、内存泄漏、代码编写错误3、请简单介绍你曾使用过的一款 APP 自动化测试工具 ?答:开放性问题,带点主观意见对比其他熟悉的自动化工具的优缺点自动化的简要方案(简要的同时关键内容请具体)。(提示: appnium 等)4、Android 测试与 web 测试有什么区别?答:相同点:设计测试用例均依据等价类、边界值等方法,测试原理相同;大多数...
            15 16 3613
            分享
      • 51testing软件测试圈微信