首页 > 代码库 > python-selenium-定位一组对象

python-selenium-定位一组对象

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

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

checkbox.html

 1 <html>
 2 <head>
 3 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
 4 <title>Checkbox</title>
 5 <script type="text/javascript" async=""
 6 src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
 7 <link
 8 href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined
 9 .min.css" rel="stylesheet" />
10 <script
11 src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></
12 script>
13 </head>
14 <body>
15 <h3>checkbox</h3>
16 <div class="well">
17 <form class="form-horizontal">
18 <div class="control-group">
19 <label class="control-label" for="c1">checkbox1</label>
20 <div class="controls">
21 <input type="checkbox" id="c1" />
22 </div>
23 </div>
24 <div class="control-group">
25 
26 <label class="control-label" for="c2">checkbox2</label>
27 <div class="controls">
28 <input type="checkbox" id="c2" />
29 </div>
30 </div>
31 <div class="control-group">
32 <label class="control-label" for="c3">checkbox3</label>
33 <div class="controls">
34 <input type="checkbox" id="c3" />
35 </div>
36 </div>
37 <div class="control-group">
38 <label class="control-label" for="r">radio</label>
39 <div class="controls">
40 <input type="radio" id="r1" />
41 </div>
42 </div>
43 <div class="control-group">
44 <label class="control-label" for="r">radio</label>
45 <div class="controls">
46 <input type="radio" id="r2" />
47 </div>
48 </div>
49 </form>
50 </div>
51 </body>
52 </html>

checkbox_test.py

#conding = utf-8
from selenium import webdriver
import os
class checktest():

def __init__ (self):

    self.driver = webdriver.Chrome()
    file_path = file:/// + os.path.abspath(checkbox.html)
    self.driver.get(file_path)
    self.driver.maximize_window()

def checkboxs (self):
    #定义一个勾选多选框方法
    self.driver.implicitly_wait(30)
    #定位一组type为checkox的标签,遍历。遍历出来的一一勾选
    checkboxes = self.driver.find_elements_by_css_selector(input[type=checkbox])
    for checkbox in checkboxes:
        checkbox.click()

def check_1 (self):
    self.driver.implicitly_wait(50)
    #定位定位一组input标签,遍历出来。使用get_attribute()方法获取对象属性,当属性为checkbox时勾选
    inputs = self.driver.find_elements_by_tag_name(input)
    for inputes in inputs:
        if inputes.get_attribute(type) == checkbox:
            inputes.click()
def check_2 (self): #调用勾选方法 self.checkboxs() def check_3 (self): #调用勾选方法 self.checkboxs() #打印定位到type为checkbox的元素个数 print(len(self.driver.find_elements_by_css_selector(input[type=checkbox]))) #使用pop()方法去掉最后一个勾选 self.driver.find_elements_by_css_selector(input[type=checkbox]).pop().click()
def quit (self): self.driver.quit()

将两段代码保存为相应的文件,并且在同一目录下

------------------------------------------------------------------------------------------------------------------------------------

更多内容可查看乙醇的小册子

https://easonhan007.gitbooks.io/selenium-webdriver/content/

python-selenium-定位一组对象