[Selenium With C#基础教程] Lesson-04 按钮
作者:Surpassme
来源:http://www.jianshu.com/p/83d7416c4b7d
声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢。
Button通常有两种形式:标准按钮和提交按钮,如下图所示:

其中标准的按钮通常是由button标签创建,而提交按钮通常是由input创建,且通常在form里面。
HTML 源码如下:
<button id="button" class="nav" data-id="124" style="font-size:20px">标准按钮</button> <br />
<form name="input" action="index.html" method="post" >
用户名:<input type="text" name="username" /><br /><br />
密 码:<input type="password" name="pwd" /><br/>
<input type="submit" name="submit" value="注册-提交按钮" />
</form>
在Web页面中,有一些元素看起来非常像是按钮,但有一部分是通过CSS来实现的。
通过文本点击标准按钮
driver.FindElement(By.XPath("//button[contains(text(),'标准按钮')]")).Click();
通过文本点击提交按钮
在HTML里面提交按钮通常位于form内,按钮的名字是通过属性value来显示的。而在显示的文字中可能会包含一些额外的空格或不可见的字符。源码如下:
<input type="submit" name="submit" value="测试 按钮 " />
通过以下的脚本进行会失败,因为存在空格。报错信息如下图所示:
driver.FindElement(By.XPath("//input[@value='测试 按钮']")).Click();

这时,我们只需要修改一下脚本里面的文本值即可:
driver.FindElement(By.XPath("//input[@value='测试 按钮 ']")).Click();
提交表单
在Selenium官方文档里面,提交表单通常是由Submit方法实现,下面所示脚本是演示用户登录操作:
IWebElement username = driver.FindElement(By.Name("username"));
username.SendKeys("UserName");
IWebElement pwd = driver.FindElement(By.Name("pwd"));
pwd.SendKeys("pwd");
username.Submit();
上面是一种方法,而在实际页面中,我们都是通过点击提交按钮来进行操作的,以下是实现方法:
driver.FindElement(By.Name("username")).SendKeys("UserName");
driver.FindElement(By.Name("pwd")).SendKeys("pwd");
driver.FindElement(By.XPath("//input[@value='注册-提交按钮']")).Click();
尽管在一个form里面不太可能会存在多个提交按钮,但如果存在这种情况,使用** Submit**方法仅会点击第一个提交按钮,这样会造成混乱。
通过ID点击按钮
如果元素有ID,那么通过ID来定位元素是最好的方式。对于测试人员而言,通常会碰到元素中没有ID的情况,与其花很长时间来研究如何定位元素,还不如在这个时候多与开发沟通,增加元素的ID,这样也能减小测试的难度。
driver.FindElement(By.Id("button")).Click();
通过Name点击按钮
driver.FindElement(By.Name("submit")).Click();
通过图片点击按钮
在测试的过程中会遇到另一种类型的按钮。在一个form内,图片看起来非常像按钮,如下图所示:
<input type="image" src="images/button_login.jpg" />

driver.FindElement(By.XPath("//input[contains(@src, 'button_login.jpg')]")).Click();
通过JavsScript点击按钮
在用尽一切方法都不能点击按钮时,可以考虑用JavaScript来实现点击按钮,如下所示:
IWebElement btn = driver.FindElement(By.Name("submit"));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", btn);
[Selenium With C#基础教程] Lesson-04 按钮的更多相关文章
- [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-05 文本框
作者:Surpassme 来源:http://www.jianshu.com/p/7dca7d0d1ea3 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 文本框在Web页面中 ...
- [Selenium With C#基础教程] Lesson-03 超级链接
作者:Surpassme 来源:http://www.jianshu.com/p/83809943e751 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 超级链接或链接是We ...
- [Selenium With C#基础教程] Lesson-06 单选按钮
作者:Surpassme 来源:http://www.jianshu.com/p/08ee1929875f 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 单选按钮通常用在需要 ...
- Selenium IDE 基础教程
Selenium IDE 基础教程 1.下载安装 a 在火狐浏览其中搜索附件组件,查找 Selenium IDE b 下载安装,然后重启firefox 2.界面讲解 在菜单- ...
- [小北De编程手记] : Lesson 04 - Selenium For C# 之 API 上
这一部分,我准备向大家介绍Selenium WebDriver的常用API,学习这部分内容需要大家最好有一些简单的HTML相关知识,本文主要涉及到以下内容: Selenium API:元素检查 Sel ...
- [分享]Ubuntu12.04安装基础教程(图文)
[分享]Ubuntu12.04安装基础教程(图文) 原文地址: http://teliute.org/linux/Ubsetup/lesson21/lesson21.html 1.进入 live cd ...
随机推荐
- 【POJ】3280 Cheapest Palindrome(区间dp)
Cheapest Palindrome Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10943 Accepted: 5 ...
- 浅谈PHP面向对象编程(三、构造方法和析构方法)
3.0 构造方法和析构方法 从我之前的博客可以发现,实例化一个类的对象后,如果要为这个对象的属性赋值,需要直接访问该对象的属性.如果想要在实例化对象的同时就为这个对象的属性进行赋值,则可以通过构造方法 ...
- 解决Vmware workstation上不能安装Hyper-V的问题
从今天开始,博主正式开始学习微软相关的知识了.众所周知,微软的虚拟化技术Hyper-V现在也很火.可是博主也没有一台服务器来装Hyper-V.于是想到在自己的PC上先装一个Vmware worksta ...
- django No migrations to apply 问题解决
最近在用django写项目,有的时候字段不够用,需要models增加字段,但是想回滚或者修改或者修改了属性等,例如忘了添加meta table于是操作了migrations 导致makemigrati ...
- git 一些用法
创建远程分并跟踪: git remote add remote_branch_name git@github.com:test/test.git git fetch upstream 跟踪原始代码 删 ...
- Flask之视图(二)
2.2 扩展 上下文:相当于一个容器,保存了Flask程序运行过程中的一些信息. Flask中有两种上下文,请求上下文和应用上下文. 请求上下文(request context) request和se ...
- Django学习---缓存
缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存. 缓存将一个某个views的返回值保存至内存或者memcach ...
- 改bug的乐趣
一直以来,我都不喜欢改bug,不管是自己的,还是别人的.因为我不相信自己的代码会出现问题,一旦出现问题我就会觉得很难堪,因为我觉得我的代码没什么问题.然后我就不知道该怎么来解决这些问题. 最近这一两次 ...
- MySQL数据库篇之索引原理与慢查询优化之二
接上篇 7️⃣ 正确使用索引 一.索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果, 我们在添加索引时,必须遵循以下问题: #1 范围问题,或者说条件 ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周
java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...