• 定位一组对象-checkbox 、radiobutton


    webdriver 可以很方便的使用find_element 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,WebElement 接口同样提供了定位一组元素的方法find_elements。

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

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

    checkbox.html   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>
              </form>
           </div>
        </body>
    </html>

    补充后的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="r1" />
                        </div>
                    </div>
                    
                    <div class="control-group">
                        <label class="control-label" for="r">radio</label>
                        <div class="controls">
                            <input type="radio" id="r2" />
                        </div>
                    </div>
                </form>
            </div>
        </body>
    </html>

    将这段代码保存复制到记事本中,将保存成checkbox.html 文件。(注意,这个页面需要和我们的自动化脚本放在同一个目录下,否则下面的脚本将checkbox.html 的所在目录)
    通过浏览器打开checkbox.html,将看到以下页面:

                                         图3.5

    如果3.5所示:

    可以看到页面提供了三个复选框和两个单选按钮。下面通过脚本来单击勾选三个复选框。

    代码示例:

    # -*- coding: utf-8 -*-
    from selenium import webdriver
    import os

    driver = webdriver.Firefox()
    file_path = 'file:///' + os.path.abspath('checkbox.html')
    driver.get(file_path)

    # 选择页面上所有的tag name 为input 的元素
    inputs = driver.find_elements_by_tag_name('input')

    #然后从中过滤出tpye 为checkbox 的元素,单击勾选

    for input in inputs:
    if input.get_attribute('type') == 'checkbox':
    input.click()

    driver.quit()

     

    你可以试着把input.get_attribute('type') == 'checkbox' 中的checkbox 变成radio ,那这个脚本定位的会是两个单选框

    说明:

    import os
    os.path.abspath()

    os 模块为python 语言标准库中的os 模块包含普遍的操作系统功能。主要用于操作本地目录文件。
    path.abspath()方法用于获取当前路径下的文件。另外脚本中还使用到for 循环,对inputs 获取的一组元素进行循环,在python 语言中循环变量(input)可以不用事先声明直接使用。

    find_elements_by_xx(‘xx’)
    find_elements 用于获取一组元素。

     

    下面通过css 方式来勾选一组元素,打印当所勾选元素的个数并对最后一个勾选的元素取消勾选。

     代码示例:

    #coding=utf-8
    from selenium import webdriver
    import os


    driveriver = webdriver.Firefox()
    file_path = 'file:///' + os.path.abspath('checkbox.html')
    driver.get(file_path)


    # 选择所有的type 为checkbox 的元素并单击勾选
    checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')


    for checkbox in checkboxes:
    checkbox.click()

    # 打印当前页面上type 为checkbox 的个数
    print len(driver.find_elements_by_css_selector('input[type=checkbox]'))

    # 把页面上最后1个checkbox 的勾给去掉
    driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()

    driver.quit()

    说明:

    len()
    len 为python 语言中的方法,用于返回一个对象的长度(或个数)。

    pop()
    pop 也为python 语言中提供的方法,用于删除指定们位置的元素,pop()为空默认选择最一个元素。

    尝试

    把find_elements_by_css_selector('input[type=checkbox]').pop().click() 中的checkbox 变成radio 会是什么效果,自己尝试一下吧!

    知识扩充:

    参考博客地址:http://www.cnblogs.com/yoyoketang/p/6128675.html

  • 相关阅读:
    MongoDB 基础
    类加载流程,类加载机制及自定义类加载器详解
    Object中有哪些方法及其作用
    Intellij IDEA 导入Maven项目
    用IDEA开发Spring程序
    深入浅出 Java 8 Lambda 表达式
    UUID.randomUUID()简单介绍
    json字符串转成 json对象 json对象转换成java对象
    字符串转 Boolean 的正确方式
    获取JSON中所有的KEY
  • 原文地址:https://www.cnblogs.com/jshtest/p/6224947.html
Copyright © 2020-2023  润新知