作者:Surpassme

来源:http://www.jianshu.com/p/83809943e751

声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢。

超级链接或链接是Web页面的基本元素之一,而通过超级链接使得万维网可以互联互通。一个典型的链接如下所示:

HTML源码如下所示:

<a href="index.html" id="Selenium_id" class="nav" data-id="123" style="font-size: 14px;">Selenium</a>
  • 通过文字点击链接

在Selenium中通过文字点击链接是最直接的一种方式,如下所示:

driver.FindElement(By.LinkText("Selenium")).Click();
  • 通过元素ID点击链接
driver.FindElement(By.Id("Selenium_id")).Click();

如果你正在测试一个多语言的网站,使用ID来进行定位或许是一种比较可行的方案,而你不需要写像下面的测试脚本:

//英语和中文两个方法
bool IsEnglish(int flag)
{
if (flag==)
return true;
return false;
}
bool IsChinese(int flag)
{
if (flag == )
return true;
return false;
}
[TestMethod]
private void TestMulLanguage()
{
int indicator = ;
if (IsEnglish(indicator))
{
driver.FindElement(By.LinkText("English")).Click();
}
else if (IsChinese(indicator))
{
driver.FindElement(By.LinkText("中文")).Click();
}
else
{
driver.FindElement(By.LinkText("English")).Click();
}
}
  • 通过部分文字点击链接

当需要点击的链接很长或动态生成,我们可以使用部分文字点击链接,如下所示:

driver.FindElement(By.PartialLinkText("Selen")).Click();
  • 使用XPath点击链接

下面的示例假设需要点击的链接位于<p>tag下面:

driver.FindElement(By.XPath("//p/a[text()='Selenium']")).Click();

在该示例中,或许有人会问,使用LinkText不是更简单直观,而且也不会出错,为什么还要使用复杂的XPath进行定位了?我们来看看如下的示例:

在该页面中,有两个“点击”的链接,HTML源码如下:

<div>
FirstSample
<a href="index.html">点击</a>
</div>
<div>
SecondSample
<a href="index.html">点击</a>
</div>

如果在测试中需要点击第二个链接,如果还是按照以下的代码进行点击,将不是你想要的结果。

driver.FindElement(By.LinkText("点击")).Click();

此时如果使用XPath就能很好的解决这个问题,代码如下:

driver.FindElement(By.XPath("//div[2]/a[text()='点击']")).Click();
  • 通过nth进行点击多个相同文字的链接

拥有多个相同文字的链接在Web并不罕见,而Selenium默认通常只会选中定位到的第一个,而你如果想选择第二个或nth,如何实现?三个链接拥有相同的文字标签,示例如下:

HTML源码如下:

    <p>
你如何看待自动化测试的重要性和价值?
<a href="index.html">显示回答</a>
<br />
你为什么没有在项目中使用自动化?
<a href="index.html">显示回答</a>
<br />
如果你的项目采用了自动化测试,将会有哪些提升?
<a href="index.html">显示回答</a>
</p>

如果要点击第二个链接,可使用以下代码:

ReadOnlyCollection<IWebElement> links = driver.FindElements(By.LinkText("显示回答"));
links[].Click();

 FindElements会返回一个满足条件的web元素集合(也有称数组)。在C#中,集合的开始标识从0开始,所以点击第二个链接,则标识应该1。

  • 通过CssSelector进行点击nth链接

以下示例是点击上一个示例第三个显示回答代码

driver.FindElement(By.CssSelector("p>a:nth-child(5)")).Click();
  • 获取链接的数据属性

一旦一个Web元素被确定,我们就可以获取到该元素的一些属性,如下所示:

    //获取链接地址
driver.FindElement(By.LinkText("Selenium")).GetAttribute("href");
//获取元素id
driver.FindElement(By.LinkText("Selenium")).GetAttribute("id");
//获取元素文本
string text=driver.FindElement(By.LinkText("Selenium")).Text;
//获取元素的TagName
string tagName = driver.FindElement(By.LinkText("Selenium")).TagName;
  • 在新窗口中打开链接

点击以下的链接,将在新窗口中打开一个链接或选项卡,如下所示:

<a href="http://www.cnblogs.com" target="_blank">在新窗口中打开博客园</a>

尽管我们可使用SwithcTo()方法切换到最新窗口,代码如下所示:

            //打开新窗口
driver.FindElement(By.Id("newWindows")).Click();
//切换到窗口
driver.SwitchTo().Window(driver.WindowHandles[]);
driver.FindElement(By.Id("zzk_q")).SendKeys("Selenium");
driver.FindElement(By.XPath("//div[@class='side_search'][1]/input[2]")).Click();
driver.Close();
//返回之前的窗口
driver.SwitchTo().Window(driver.WindowHandles[]);

当然也可以更简单的方法来实现在一个浏览器窗口中进行测试,使用一个变量(currentUrl)来存放初始的地址,代码如下:

            string currentUrl = driver.Url;
//获取新窗口的链接地址
string newWindowUrl = driver.FindElement(By.Id("newWindows")).GetAttribute("href");
//切换到新窗口
driver.Navigate().GoToUrl(newWindowUrl);
driver.FindElement(By.Id("zzk_q")).SendKeys("Selenium");
driver.FindElement(By.XPath("//div[@class='side_search'][1]/input[2]")).Click();
//返回之前初始的窗口
driver.Navigate().GoToUrl(currentUrl);

以上就是针对Selenium Web测试针对链接进行定位测试的一些方法总结,在实际测试过程,可通过各种方法灵活使用。

作者:Surpassme

来源:http://www.cnblogs.com/surpassme/

声明:转载请在文章页面明显位置给出原文连接,谢谢。

[Selenium With C#学习笔记] Lesson-03 超级链接的更多相关文章

  1. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  2. udacity android 学习笔记: lesson 4 part a

    udacity android 学习笔记: lesson 4 part a 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  3. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  4. 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解

    Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...

  5. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  6. Fortran学习笔记:03 数组(Array)

    Fortran学习笔记目录 书接上回:Fortran学习笔记:02 流控制语句 数组(Array) 定义数组 一维数组 program main implicit none integer :: i ...

  7. [Selenium With C#学习笔记] Lesson-01环境搭建

    Step-1:准备所需的开发环境.浏览器驱动.Selenium-Webdriver.单元测试框架,因目前使用C#的开发神器都Visual Studio,本文也打算采用Visual Studio 201 ...

  8. 《Effective C++ 》学习笔记——条款03

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  9. [Selenium With C#学习笔记] Lesson-02 Web元素定位

    使用Selenium来做自动化测试,一般的流程是:查找定位元素--->操作元素--->断言,那么第一步我们需要能够完成查找并定位元素,Selenium目前提供了8种基本定位方法,可根据实际 ...

随机推荐

  1. wordpress数据表结构

    Table: wp_commentmeta Field Type Null Key Default Extra meta_id bigint(20) unsigned PRI NULL auto_in ...

  2. 【腾讯优测干货分享】微信小程序之自动化亲密接触

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/HcPakz5CV1SHnu-U8n85pw 导语 山雨欲来风满楼,最 ...

  3. Java经典案例之-“分解质因数”

    /** * 描述:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. * 分析: * 对n进行分解质因数,应该先找到一个最小的质数k,然后按照下列步骤进行: * (1)如果这个质数恰 ...

  4. Delphi中解析Xml的控件-SimDesign NativeXml

    Delphi中解析Xml的控件-SimDesign NativeXml 正在学习,感觉应用很方便.无源代码的版本还是免费的. SimDesign.NativeXml是一个delphi和bcb的XML控 ...

  5. MySQL主从同步校验与重新同步

    主从复制环境中,可能有种种原因导致主.从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum.mysqldiff. ...

  6. CentOS6.5固定IP方式上网(NAT)

    使用NAT模式 虚拟机网络连接使用NAT模式,物理机网络连接使用Vmnet8.如果没有重置一下即可 虚拟机设置里面--网络适配器,网络连接选择NAT模式. 虚拟机菜单栏-编辑-虚拟网络编辑器,选择Vm ...

  7. PHP中目录解析函数

    dirname(string path):给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名. 斜线(/)和反斜线(\)都可以用作目录分隔符.在其它环境下是斜线(/). dir ...

  8. FMS+NGINX打造高带宽利用率的流媒体(音频+视频)环境

    fms自身已经拥有了httpd,用来给客户端访问用,例如通过http的音频播放.众所周知,非专业的httpd自然有不专业之处,例如我遇到的情况就是经常http服务假死,或者在访问量庞大的时候会无缘无故 ...

  9. SoapUI:使用Excel进行参数化

    本章中学习如下内容: 1)         使用DataSource调用Excel中的数据给接口参数化: 2)         使用DataSource Loop使得测试用例根据Excel中的取值循环 ...

  10. wamp的安装--亲测有用

    一.修改默认密码进入之后 use mysql;1.update user set password=PASSWORD('自己的数据库密码') where user='root';2.flush pri ...