作者:Surpassme

来源:http://www.jianshu.com/p/98ede43da3c3

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

  复选框也是Web页面常见的一种用户交互控件,可以允许用户一次选择多个选项。常见的多选按钮示例如下图所示:



HTML源码如下:

请选择你常用的交通出行方式:<br /><br />
<input type="checkbox" name="metro" checked="checked" id="metro" />地铁
<input type="checkbox" name="bus" id="bus" />公交
<input type="checkbox" name="bike" id="bike" />自行车
<input type="checkbox" name="walk" id="walk" />步行
<input type="checkbox" name="driving" id="driving" />自驾

通过Name选中复选框

  driver.FindElement(By.Name("metro")).Click();

通过ID选中复选框

对于复选框的点击而言实际第一次点击将选中,再次点击将清除选中状态(针对第一次状态是未选中状态而言),下面将演示在测试脚本中如何确认复选框是否为选中状态。

   IWebElement metroCheckbox = driver.FindElement(By.Id("metro"));
if (!metroCheckbox.Selected)
{
metroCheckbox.Click();
}

通过连续调用FindElement方法选中复选框

针对要定位的复选框具有多个相同的属性时,我们可以使用XPath定位,也可以使用连续调用FindElement方法。HTML源码如下:

<div id="div1">
<input type="checkbox" name="test" checked="checked" value="on" />复选框位于第一个div里面
</div>
<div id="div2">
<input type="checkbox" name="test" checked="checked" value="on" />复选框位于第二个div里面
</div>

定位的脚本代码如下所示:

 driver.FindElement(By.Id("div2")).FindElement(By.Name("test")).Click();

清除复选框选中状态

对于清除复选框的状态,我们只需要再次点击复选框即可,与单选按钮一样,不能使用Clear()方法。因为复选框的状态而言总共就两种状态,选中和未选中状态。

  IWebElement drivingCheckbox = driver.FindElement(By.Id("driving"));
if (drivingCheckbox.Selected)
{
drivingCheckbox.Click();
}
else
{
drivingCheckbox.Click();
}

断言复选框的状态

判断复选框的方法比较简单,只需要使用Assert类中的方法即可。

   IWebElement bikeCheckbox = driver.FindElement(By.Id("bike"));
Assert.IsFalse(bikeCheckbox.Selected);
bikeCheckbox.Click();
Assert.IsTrue(bikeCheckbox.Selected);

使用用户自定义插件的筛选框,如iCheck

在Web页面中开发人员经常会使用一些插件自定义的控件,如下图即是采用iCheck插件的自定义复选框:



以下为HTML部分源码:

<ul class="list">
<li>
<div class="icheckbox_flat-red checked"><input tabindex="13" id="flat-checkbox-1" style="position: absolute; opacity: 0;" type="checkbox">
<ins style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 0px none;
opacity: 0;"></ins>
</div>
<label for="flat-checkbox-1" class="">Checkbox 1</label>
</li>
<li>
<div class="icheckbox_flat-red checked"><input tabindex="14" id="flat-checkbox-2" checked="" style="position: absolute; opacity: 0;" type="checkbox">
<ins style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border: 0px none;
opacity: 0;"></ins>
</div>
<label for="flat-checkbox-2" class="">Checkbox 2</label>
</li>
</ul>

完整代码如下:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using System.Collections.ObjectModel;
using System.Threading;
using System.Drawing; namespace SeleniumDemo
{
[TestClass]
public class Lesson07
{
IWebDriver driver = null;
[ClassInitialize]
public static void TestInitialize(TestContext context)
{
Console.WriteLine("初始化TestInitialize");
}
[TestInitialize]
public void TestInitialize()
{
driver = new ChromeDriver();
Console.WriteLine("开始进行测试");
} [TestMethod]
public void TestCheckbox()
{
Console.WriteLine("调用测试方法");
string url = "http://www.bootcss.com/p/icheck/";
driver.Navigate().GoToUrl(url);
driver.Manage().Window.Maximize();
IWebElement checkBox1Ele = driver.FindElement(By.XPath("//ul[@class='list']/li[1]/div[contains(@class,'icheckbox_flat-red')]"));
IWebElement checkBox2Ele = driver.FindElement(By.XPath("//ul[@class='list']/li[2]/div[contains(@class,'icheckbox_flat-red')]"));
int position = checkBox1Ele.Location.Y;
((IJavaScriptExecutor)driver).ExecuteScript("$(window.scrollTo(0," + position + "));");
checkBox1Ele.Click();
checkBox2Ele.Click();
Assert.IsTrue((driver.FindElement(By.XPath("//ul[@class='list']/li[1]/div[contains(@class,'icheckbox_flat-red')]/input"))).Selected);
Assert.IsFalse((driver.FindElement(By.XPath("//ul[@class='list']/li[2]/div[contains(@class,'icheckbox_flat-red')]/input"))).Selected);
}
[TestCleanup]
public void TestCleanup()
{
Console.WriteLine("结束测试");
driver.Quit();
}
[ClassCleanup]
public static void ClassCleanup()
{
Console.WriteLine("清理ClassCleanup");
}
}
}

在上面完整的代码中,点击Checkbox按钮和判断Checkbox的状态,所使使用的元素不一样,不知各位大神能否帮忙解释一下原因?其实不管是什么类型的Web控件,定位的基本方法都是Webdriver API提供的8种基本方法,在日常测试中灵活加以应用,可大大提高日常工作效率。[作者:Surpassme]

[Selenium With C#基础教程] Lesson-07 复选框的更多相关文章

  1. 自动化测试基础篇--Selenium单选框(Radio)复选框(CheckBox)

    摘自:https://www.cnblogs.com/sanzangTst/p/7686602.html 一.什么是单选框.复选框? 二.单选框:radio 三.复选框:checkbox 四.判断是否 ...

  2. 转:jQuery LigerUI 使用教程表格篇(3) 复选框、多表头、分组、汇总和明细

    阅读目录 复选框 多表头 分组 汇总 明细 复选框 grid可以设置复选框模式进行多选,只需要简单的配置 checked:true 获取选中行 如果要获取选中的行,可以用getSelecteds方法: ...

  3. 吾八哥学Selenium(三):操作复选框checkbox/单选框radio的方法

    复选框checkbox和单选框radio是web网站里经常会使用到的两个控件,那么在web自动化测试的时候如何利用Selenium来操作这俩控件呢?今天我们就来简单入门练习一下! html测试页面代码 ...

  4. selenium 操作复选框

    场景 从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象, 这时候就需要使用findElements方法. 定 ...

  5. 自动化测试-15.selenium单选框与复选框状态判断

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...

  6. selenium+Python(定位 单选、复选框,多层定位)

    1.定位一组元素webdriver 可以很方便的使用 findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用 findElements 方法.定位一组对象 ...

  7. 【selenium+Python WebDriver API】之复选框顺序正选和顺序反选

    from selenium import webdriver from selenium.webdriver.common.by import By import os,time driver = w ...

  8. Selenium WebDriver-操作复选框

    #encoding=utf-8 import unittest import time import chardet from selenium import webdriver class Visi ...

  9. python selenium单/复选框操作

    一.单选:radio 1.首先是定位选择框的位置 2.定位id,点击图标就可以了,代码如下(获取url地址方法:把上面源码粘贴到文本保存为.html后缀后用浏览器打开,在浏览器url地址栏复制出地址就 ...

随机推荐

  1. 进度条(ProgressBar)的功能与用法

    进度条也是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的的百分比.进度条可以动态的显示进度,因此避免长时间的执行某个耗时的操作,让用户感觉程序失去了响应,从而更好的提高用户界面的友 ...

  2. Canvas createLinearGradient API

    createLinearGradient addColorStop <!DOCTYPE html> <html lang="en"> <head> ...

  3. linux上静态库链接的有关问题

    求大神,linux下静态库链接的问题有两个文件和一个库,a.c, b.c,libh.a,其中b.c里面会有调用libh.a的函数func1,现在将a.c, b.c,libh.a编译链接生成可执行文件, ...

  4. Java中的==、equals、hasCode方法

    == java 的数据类型分为“基本数据类型” 和“引用数据类型”在基本数据类型的比较中,== 比的就是基本数据类型变量中所保存的值在引用数据类型的比较中,== 才比较的是变量所指向的对象的地址. e ...

  5. 进阶之初探nodeJS

    一.前言 在"初探nodeJS"随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器. 今儿,再次看了该篇随笔,发现该随笔理论知 ...

  6. C语言函数名与函数指针详解

    一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...

  7. 深圳尚学堂:Web程序员应该会的知识

    互联网的行业里涌入了很多的程序员, 都在为互联网的发展添砖加瓦.程序员可以分为很多种,像Unix程序员.Windows程序员,或是C++程序员.Delphi程序员,等等.今天我们谈谈Web程序员,一名 ...

  8. 《JAVASCRIPT高级程序设计》节点层次和DOM操作技术

    DOM可以将任何HTML和XML文档描绘成一个由多层次节点构成的结构.节点分为几种不同的类型,每种类型分别表示文档中不同的信息,每种类型都继承与Node接口,因此都共同享有一些属性和方法,同时,也拥有 ...

  9. 类似qq空间的无限回复怎么实现??

    在开发网站的时候遇到这样一个问题,下面是自己的一些思路: 1.把数据库简单的设计出来了 2.这是自己写的简单的例子 3.图表形式 1:   1.发表一篇文章 2:  2给1评论 3:  3给2评论 2 ...

  10. GoldenGate 传统抽取进程的 ADG 模式

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...