[Selenium With C#基础教程] Lesson-03 超级链接
作者: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 超级链接的更多相关文章
- [Selenium With C#基础教程] Lesson-07 复选框
作者:Surpassme 来源:http://www.jianshu.com/p/98ede43da3c3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. [作者:Surp ...
- [Selenium With C#基础教程] Lesson-01环境搭建
作者:Surpassme 来源:http://www.jianshu.com/p/33b87bc00233 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 最近开始复习Sele ...
- [Selenium With C#基础教程] Lesson-02 Web元素定位
作者:Surpassme 来源:http://www.jianshu.com/p/cfd4ed1daabd 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 使用Selenium ...
- [Selenium With C#基础教程] Lesson-06 单选按钮
作者:Surpassme 来源:http://www.jianshu.com/p/08ee1929875f 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 单选按钮通常用在需要 ...
- [Selenium With C#基础教程] Lesson-05 文本框
作者:Surpassme 来源:http://www.jianshu.com/p/7dca7d0d1ea3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 文本框在Web页面中 ...
- [Selenium With C#基础教程] Lesson-04 按钮
作者:Surpassme 来源:http://www.jianshu.com/p/83d7416c4b7d 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. Button通常有两 ...
- gdb超级基础教程
GDB超级基础教程 为什么叫超级基础呢,因为我被坑了一把.... 编译选项带 -g 就可以在可执行程序中加入调试信息,然后就可以使用gdb去查看了. 使用help命令就可以看到: (gdb) help ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- iOS 9音频应用开发基础教程
iOS 9音频应用开发基础教程(大学霸内部资料) 介绍:iOS 9音频应用开发基础教程(内部资料)是iOS 9音频应用开发专向教程.本书采用Swift 2.0语言开发基于iOS 9的音频应用.实现 ...
随机推荐
- 4.Appium实现自动化安装apk
一.代码如下所示: from appium import webdriver import os apk_path = os.path.abspath(os.path.join(os.path.dir ...
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...
- 设置JAVA HOME环境变量的秕处理
echo "放在JDK目录下,win xp需要下载SETX.EXE" setx /m Java_Home "%cd%" setx /m ClassPath &q ...
- 管理Linux服务器的用户和组(续篇)
用户切换 新建用户 useradd命令的选项 设置用户口令 passwd命令的选项 chage命令 修改用户帐户 禁用和恢复用户帐户 禁用和恢复用户帐户- Passwd命令 禁用和恢复用户帐户-直接修 ...
- php利用curl实现多进程下载文件类
批量下载文件一般使用循环的方式,逐一执行下载.但在带宽与服务器性能允许的情况下,使用多进程进行下载可以大大提高下载的效率.本文介绍PHP利用curl的多进程请求方法,实现多进程同时下载文件. 原理: ...
- 关于json_encode转义斜杠的问题
加上参数 JSON_UNESCAPED_SLASHES即可 echo json_encode($data,JSON_UNESCAPED_SLASHES);
- javascript instanceof,typeof的区别
区分string 与 String的区别 为什么结果会是false呢? <script type="text/javascript"> var aColors = [& ...
- Node.js究竟是什么?
来源:https://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html?ca=drs#ibm-pcon Node 旨在解决 ...
- 【Git】一、Git简介
一.什么是Git Git是一款免费的开源分布式版本控制系统,可以有效的,高速的处理从很小到非常大的文件. 二.Git VS SVN 1. Git 是分布式的,SVN 是集中式的 2. Git 存储的是 ...
- abd启动不了
解决办法: 杀死 db.exe或者tadb.exe