作者: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 按钮的更多相关文章

  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-05 文本框

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

  5. [Selenium With C#基础教程] Lesson-03 超级链接

    作者:Surpassme 来源:http://www.jianshu.com/p/83809943e751 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. 超级链接或链接是We ...

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

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

  7. Selenium IDE 基础教程

    Selenium IDE 基础教程 1.下载安装     a 在火狐浏览其中搜索附件组件,查找 Selenium IDE     b 下载安装,然后重启firefox 2.界面讲解      在菜单- ...

  8. [小北De编程手记] : Lesson 04 - Selenium For C# 之 API 上

    这一部分,我准备向大家介绍Selenium WebDriver的常用API,学习这部分内容需要大家最好有一些简单的HTML相关知识,本文主要涉及到以下内容: Selenium API:元素检查 Sel ...

  9. [分享]Ubuntu12.04安装基础教程(图文)

    [分享]Ubuntu12.04安装基础教程(图文) 原文地址: http://teliute.org/linux/Ubsetup/lesson21/lesson21.html 1.进入 live cd ...

随机推荐

  1. java之IO整理(上)

    /*//创建一个新文件 public static void main(String[] args) { File file=new File("D:\\hello.txt"); ...

  2. 实例演示oracle数据块状态视图v$bh的用法二 热点块问题(转)

    在实例一中,我们读取到了x$bh中的tch字段,该字段表示的该字段被读取/写入的次数,这个值在oracle的LRU算法中,是一个重要的参数,如果这个字段被访问,则该值就会增加: 1,第一次查看TCH的 ...

  3. OrhtoMCL 使用方法

    OrthoMCL的使用分13步进行,如下: 1. 安装和配置数据库 Orthomcl可以使用Oracle和Mysql数据库,而在这里只介绍使用Mysql数据库.修改配置文件/etc/my.cnf,对M ...

  4. 第四章:重构代码[学习Android Studio汉化教程]

    第四章 Refactoring Code The solutions you develop in Android Studio will not always follow a straight p ...

  5. 深入浅出 Java Concurrency (12): 锁机制 part 7 信号量(Semaphore)

      Semaphore 是一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能 ...

  6. Centos7 / RHEL 7 双网卡绑定

    http://www.cnblogs.com/hukey/p/6224969.html 1. 简要    双网卡绑定技术在centos7中使用了teaming技术,而在rhel6/centos7中使用 ...

  7. ajax传递给后台数组参数方式

    出自:http://blog.csdn.net/lingxyd_0/article/details/10428785 在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用 ...

  8. iOS开发基础控件--UITextField

    001 //初始化textfield并设置位置及大小 002   UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20 ...

  9. TI XDC工具入门简介

    1. XDC(Express DSP Component)是TI提供的一个命令行工具,它可以生成并使用实时软件组件包,它包括一系列工具,这些工具可以允许你将你的C语言代码组织成类似于java的包管理方 ...

  10. react-native init安装指定版本的react-native

    C:\Users\ZHONGZHENHUA\imooc_gp\index.js index.js /** @format */ import React,{ Component } from 'rea ...