webdriver(python)学习笔记四——定位一组元素

webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法。

定位一组对象一般用于以下场景:

  • 批量操作对象,比如将页面上所有的checkbox都勾上
  • 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

checkbox.html

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Checkbox</title>
<script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
</head>
<body>
<h3>checkbox</h3>
<div class="well">
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="c1">checkbox1</label>
<div class="controls">
<input type="checkbox" id="c1" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="c2">checkbox2</label>
<div class="controls">
<input type="checkbox" id="c2" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="c3">checkbox3</label>
<div class="controls">
<input type="checkbox" id="c3" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="r">radio</label>
<div class="controls">
<input type="radio" id="r" />
</div>
</div>
</form>
</div>
</body>
</html>

此脚本需要与自动化脚本同一目录下。

将html打开显示如下图所示:

webdriver(python)学习笔记四——定位一组元素

可看出共打开三个复选框,一个单选框。

方法一:定位三个复选框

# 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(1) dr.quit()

这里input的attribute类型有checkbox,也有radio,也可以将其设为radio,则可将其选中。

第二种方法:

# coding:utf-8

from selenium import webdriver
from time import sleep
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()
sleep(1) #打印当前页面上共有多少个checkbox
print len(dr.find_elements_by_css_selector('input[type=checkbox]'))
sleep(1) dr.quit()

两种方式都是通过循环来选中元素,两种方法定位时不同,一个是name,一个是css方式。

上面两种方法都是将同一类型的复选框全部选中的方法,那如何只取其中的几个呢。实现方式可以是先全部选中,再去掉某个。

如何去掉勾选:

把最后一个选中复选框去掉方法。

# coding:utf-8

from selenium import webdriver
from time import sleep
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() #打印当前页面上共有多少个checkbox
print len(dr.find_elements_by_css_selector('input[type=checkbox]')) #将页面上最后1个checkbox的勾选运去掉 dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
sleep(2) dr.quit()

去掉勾选的逻辑就是先选中,然后再次点击取消选中。在此使用的方法的pop()方法即删除最后一个元素。

上一篇:.NET MVC执行过程 及 生命周期步骤


下一篇:Farewell Party-构造