单选框和复选框(radiobox、checkbox)

前言

网页上有时候遇到checkbox和radio,一般情况下这两种都是input标签,我们可以通过点击或者发送空格的方式进行选中。

 

一、认识单选框和复选框

1.先认清楚单选框和复选框长什么样

2.各位小伙伴看清楚哦,上面的单选框是圆的;下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了,可以先抽他了。

 

二、radio和checkbox源码

1.上图的html源码如下,把下面这段复制下来,写到文本里,后缀改成.html就可以了。

<html>  
    <head>  
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>  
    <title>单选和复选</title>  
    </head>  
    <body>  
    
    </form>  
    <h4>单选:性别</h4>  
    <form>  
    <label value="radio"></label>   
    <input name="sex" value="male"id="boy" type="radio"><br>  
    <label value="radio1"></label>  
    <input name="sex" value="female"id="girl" type="radio">  
    </form>  
    
    <h4>微信公众号:从零开始学自动化测试</h4> 
    <form>  
    <!-- <labelfor="c1">checkbox1</label> -->  
    <input id="c1"type="checkbox">selenium<br>  
    <!-- <labelfor="c2">checkbox2</label> -->  
    <input id="c2"type="checkbox">python<br>  
    <!-- <labelfor="c3">checkbox3</label> -->  
    <input id="c3"type="checkbox">appium<br>  
    
    <!-- <form>  
    <input type="radio" name="sex" value="male"/> Male  
    <br />  
    <input type="radio" name="sex"value="female" /> Female  
    </form> -->  
      
    </body>  
    </html> 

 

三、单选:radio

1.首先是定位选择框的位置

2.定位id,点击图标就可以了,代码如下(获取url地址方法:把上面源码粘贴到文本保存为.html后缀后用浏览器打开,在浏览器url地址栏复制出地址就可以了)
3.先点击boy后,等两秒再点击girl,观察页面变化

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Cherry/Desktop/testtest.html")
time.sleep(1)
driver.find_element_by_id("boy").click() # 点击
# driver.find_element_by_id("boy").send_keys(Keys.SPACE) #发送空格
time.sleep(2)
driver.find_element_by_id("girl").click()
# driver.find_element_by_id("girl").send_keys(Keys.SPACE)

 

四、复选框:checkbox

1.勾选单个框,比如勾选selenium这个,可以根据它的id=c1直接定位到点击就可以了

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Cherry/Desktop/testtest.html")
time.sleep(1)
driver.find_element_by_id("c1").click()
# time.sleep(1)
# driver.find_element_by_id("c2").click()
# time.sleep(1)
# driver.find_element_by_id("c1").click()

 2.那么问题来了:如果想全部勾选上呢?

 

五、全部勾选

1.全部勾选,可以用到定位一组元素,从上面源码可以看出,复选框的type=checkbox,这里可以用xpath语法:.//*[@type='checkbox']

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Cherry/Desktop/testtest.html")
time.sleep(1)
s = driver.find_elements_by_css_selector("input[type='checkbox']") # css定位
s = driver.find_elements_by_xpath("//input[@type='checkbox']") #xpath定位
for i in s:
    i.click()

2.这里注意,敲黑板做笔记了:find_elements是不能直接点击的,它是复数的,所以只能先获取到所有的checkbox对象,然后通过for循环去一个个点击操作。

 

六、判断是否选中:is_selected()

1.有时候这个选项框,本身就是选中状态,如果我再点击一下,它就反选了,这可不是我期望的结果,那么可不可以这样:当它是没选中的情况下,我去点击下;当它已经是选中状态,我就不点击呢?那么问题来了:如何判断选项框是选中状态?
2.判断元素是否选中这一步才是本文的核心内容,点击选项框对于大家来说没什么难度。获取元素是否为选中状态,代码如下。
3.返回结果为bool类型,没点击时候返回False,点击后返回True,接下来就很容易判断了,既可以作为操作前的判断,也可以作为测试结果的判断。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Cherry/Desktop/testtest.html")
# 没点击操作前,判断选项框状态
loc1 = driver.find_element_by_id("boy").is_selected()
print(loc1)
driver.find_element_by_id("boy").click()
# 点击后,判断元素是否为选中状态
loc2 = driver.find_element_by_id("boy").is_selected()
print(loc2)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("file:///C:/Users/Cherry/Desktop/testtest.html")
s = driver.find_elements_by_css_selector("input[type='checkbox']")
s[2].click() # 试验下:先把appium选项勾选上,然后等待一秒观察结果
# s[2].send_keys(Keys.SPACE)
time.sleep(1)
for i in s:
    # i.click() # 直接循环勾选的话,原先已经勾选了的appium选项就会被取消
    # 点击操作前,先判断选项框状态
    if not i.is_selected(): # 若是没有勾选的,就勾选上;已勾选上的,不作处理
        i.click()
        # i.send_keys(Keys.SPACE)

 

当然,选中和判断是否选中还有其他的方法,如模拟鼠标点击、用js选中、修改标签属性选中;用js、jQuery判断是否选中、用标签属性判断是否选中,不过针对大部分情况,以上方法足够用了。如果以上方法失效,可以考虑直接修改或获取标签属性,或者可能是其他因素如等待时间、页面遮挡等导致无法选中,可进行更多尝试。

posted @ 2018-12-29 16:11  风聆  阅读(551)  评论(0)    收藏  举报