首页 > 编程语言 > 详细

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

时间:2014-01-26 17:38:20      阅读:557      评论:0      收藏:0      [点我收藏+]

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

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

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

checkbox.html

bubuko.com,布布扣
<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>
bubuko.com,布布扣

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

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

bubuko.com,布布扣

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

方法一:定位三个复选框

bubuko.com,布布扣
# 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()
bubuko.com,布布扣

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

第二种方法:

bubuko.com,布布扣
# 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()
    
bubuko.com,布布扣

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

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

 

如何去掉勾选:

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

bubuko.com,布布扣
# 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()
bubuko.com,布布扣

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

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

原文:http://www.cnblogs.com/kongzhongqijing/p/3533779.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!