將這段代碼保存復(fù)制到記事本中,將保存成checkbox.html文件。(注意,這個頁面需要和我們的自動化腳本放在同一個目錄下)
check box
第一種方法:
通過瀏覽器打個這個頁面我們看到三個復(fù)選框和兩個單選框。下面我們來定位這三個復(fù)選框。
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import os
dr = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('checkbox.html')
dr.get(file_path)
# 選擇頁面上所有的input,然后從中過濾出所有的checkbox并勾選之
inputs = dr.find_elements_by_tag_name('input')
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
time.sleep(2)
dr.quit()
你可以試著把input.get_attribute('type') == 'checkbox' 中的checkbox 變成radio ,那這個腳本定位的會是兩個單選框。
第二種定位方法:
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import os
dr = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('checkbox.html')
dr.get(file_path)
# 選擇所有的checkbox并全部勾上
checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
checkbox.click()
time.sleep(2)
# 打印當(dāng)前頁面上有多少個checkbox
print len(dr.find_elements_by_css_selector('input[type=checkbox]'))
time.sleep(2)
dr.quit()
第二種寫法與第一種寫法差別不大,都是通過一個循環(huán)來勾選控件;如果你學(xué)過上一章的話,細(xì)心的你一定發(fā)現(xiàn)用的定位函數(shù)不一樣,第一種用的name ,第二種用的CSS 。
如何去掉勾選:
還有一個問題,有時候我們并不想勾選頁面的所有的復(fù)選框(checkbox),可以通過下面辦法把后一個被勾選的框去掉。如下:
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import os
dr = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('checkbox.html')
dr.get(file_path)
# 選擇所有的checkbox并全部勾上
checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
checkbox.click()
time.sleep(2)
# 把頁面上后1個checkbox的勾給去掉
dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
time.sleep(2)
dr.quit()
其實,去掉勾選表也邏輯也非常簡單,是再次點擊勾選的按鈕?赡芪覀儽容^迷惑的是如何找到“后一個”按鈕。pop() 可以實現(xiàn)這個功能。
好吧!在web自動化的學(xué)習(xí)過程中,我們必須要知道一些前端的東西,這里擴展一下:
http://www.w3school.com.cn/js/jsref_pop.asp
嘗試:
把find_elements_by_css_selector('input[type=checkbox]').pop().click() 中的checkbox 變成radio 會是什么效果,自己嘗試一下吧!