作者: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. [Selenium With C#基础教程] Lesson-07 复选框

    作者:Surpassme 来源:http://www.jianshu.com/p/98ede43da3c3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢.   [作者:Surp ...

  2. [Selenium With C#基础教程] Lesson-01环境搭建

    作者:Surpassme 来源:http://www.jianshu.com/p/33b87bc00233 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 最近开始复习Sele ...

  3. [Selenium With C#基础教程] Lesson-02 Web元素定位

    作者:Surpassme 来源:http://www.jianshu.com/p/cfd4ed1daabd 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 使用Selenium ...

  4. [Selenium With C#基础教程] Lesson-06 单选按钮

    作者:Surpassme 来源:http://www.jianshu.com/p/08ee1929875f 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 单选按钮通常用在需要 ...

  5. [Selenium With C#基础教程] Lesson-05 文本框

    作者:Surpassme 来源:http://www.jianshu.com/p/7dca7d0d1ea3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 文本框在Web页面中 ...

  6. [Selenium With C#基础教程] Lesson-04 按钮

    作者:Surpassme 来源:http://www.jianshu.com/p/83d7416c4b7d 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. Button通常有两 ...

  7. gdb超级基础教程

    GDB超级基础教程 为什么叫超级基础呢,因为我被坑了一把.... 编译选项带 -g 就可以在可执行程序中加入调试信息,然后就可以使用gdb去查看了. 使用help命令就可以看到: (gdb) help ...

  8. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  9. iOS 9音频应用开发基础教程

    iOS 9音频应用开发基础教程(大学霸内部资料)   介绍:iOS 9音频应用开发基础教程(内部资料)是iOS 9音频应用开发专向教程.本书采用Swift 2.0语言开发基于iOS 9的音频应用.实现 ...

随机推荐

  1. excel 条件格式 心的

    例1: 图1 图2 $G$16 ≠G16  用G16就可以用格式刷拖动,$G$16用格式刷刷到其它单元格保持不变,判断单元格函数 ISBLANK(G16)=TRUE

  2. 正则,以“this.Name”开头,以“;”结尾

    string regex="this\\.Name(.*?);"; string regex="this\\.Name(.*?);"; 以size开头,以数字结 ...

  3. node使用JsonWebToken 生成token,完成用户登录、登录检测

    最近在用node做后台的登录,检测登录功能.在本地使用session可以成功,但是放服务器后发现session失效了,每次请求session都会变化,着了很久原因.原来,自己项目是前后端分离的,前端调 ...

  4. Charles 3断点篡改数据

    只是临时修改一次网络请求结果,使用重写过于麻烦.对于临时性的修改,最好使用断点. 断点功能主要修改requess和response内容,这个时候接口是在Charles代理层被拦截,还未到手机设备上. ...

  5. jquery.raty.js 评星插件的使用

    需要实现一个五星好评的功能,所以找到了这个JQ插件,使用起来还算简单,在这里记录下使用的方式. 第一步:导入这个插件和压缩包中的img文件夹 <script type="text/ja ...

  6. PMP Fundamentals

  7. java 文件指针复位

    BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream("userremain.l ...

  8. params over length limit is 20

  9. How to run eclipse in clean mode? and what happens if we do so?

    What it does: if set to "true", any cached data used by the OSGi framework and eclipse run ...

  10. cannot nest '/dubboService/src/main/resources' inside '/dubboService/src/main' .To enable the nesting exclude '/resources' from '/dubboService/src/main'

    eclipse Maven--->update Project时出现以上错误: cannot nest '/dubboService/src/main/resources' inside '/d ...