zoukankan      html  css  js  c++  java
  • Python+selenium(定位一组元素)

    我们熟知Webdriver有8种定位元素的方法,但是当需要定位一组元素的时候,可以使用Webdriver提供的与之对应的8种用于定位一组元素的方法,分别是:

    • find_elements_by_id()
    • find_elements_by_name()
    • find_elements_by_class_name()
    • find_elements_by_tag_name()
    • find_elements_by_link_text()
    • find_elements_by_partial_link_text()
    • find_elements_by_xpath()
    • find_elements_by_link_css_selector()

    常见的定位一组元素一般用于以下场景:

    1. 批量操作元素,例如勾选页面上所有的复选框。
    2. 先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位页面上所有的checkbox,然后选择其中的一个进行操作。

    手动创建一个checkbox.html页面:

    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <title>Checkbox</title>
    <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
    <script src="http://cdn.bootcss.com/bootstrap/3.3.3.0/css/bootstrap.min.js"></script>
    </head>
        <body>
        <h3>checkbox</h3>
        <div class="well">
            <form class="form-horizontal">
                <div class="control-group">
                    <label class="control-lable" for="c1">checkbox1</label>
                    <div class="controls">
                        <input type="checkbox" id="c1" />
                    </div>
                </div>
                <div class="control-group">
                    <label class="control-lable" for="c2">checkbox2</label>
                    <div class="controls">
                        <input type="checkbox" id="c2" />
                    </div>
                </div>
                <div class="control-group">
                    <label class="control-lable" for="c3">checkbox3</label>
                    <div class="controls">
                        <input type="checkbox" id="c3" />
                    </div>
                </div>
            </form>
        </div>
        </body>
    </html>

    浏览器打开如下:

    Python代码:

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    file_path = r'E:python_scriptWebdrivercheckbox.html'
    driver.get(file_path)
    
    # 选择页面上所有tag name为input的元素
    inputs = driver.find_elements_by_tag_name('input')
    
    # 然后从中过滤出type为checkbox的元素,单击勾选
    for i in inputs:
        if i.get_attribute('type') == 'checkbox':
            i.click()
            time.sleep(1)
    
    driver.quit()

    如果只想要选择所有复选框中的一个,那么可以:

    driver.find_elements_by_tag_name('input')[1].click()

    除此之外,还可以使用XP啊退货或CSS来直接判断属性值,从而进行单击操作

    # 使用xpath找到type=checkbox的元素
    chekboxes = driver.find_elements_by_xpath("//input[@type='checkbox']")
    
    # 通过CSS找到type=checkbox的元素
    checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')

    选择之后,想要取消某一个复选框的操作:

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

    pop()方法用于获取列表中的一个元素(默认为最后一个元素)

    • pop()或pop(-1):默认获取一组元素的最后一个
    • pop(0):             默认获取一组元素中的第一个
    • pop(1):             默认获取一组元素中的第二个
    • ......
  • 相关阅读:
    企业命令linux下处理实时日志生成另一个实时日志
    排序算法Java(android)安卓中的list对象排序
    项目设置一个类似HTML map标签功能的Android组件
    最大算法【Manacher模板】HDU 3068——求最长回文子串
    类实现java面向对象上:接口
    线程方法Android:异步调用详解
    输入数字实现分页功能(三层)
    对象主题设计模式读书笔记观察者模式
    网站算法石榴算法严厉打击下 网站盈利方向何在
    闭包执行JavaScript中的闭包
  • 原文地址:https://www.cnblogs.com/NancyRM/p/8214221.html
Copyright © 2011-2022 走看看