zoukankan      html  css  js  c++  java
  • webdriver(python)学习笔记五——层级定位

    层级定位

    在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个。由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位。先定位父元素,然后再通过父元素定位子孙元素。

    假如有两个控件,名称相同,但是略微有一些区别,如一个在北京,一个在上海,要怎么定位找到他们呢,可以根据区别层级不同按城市、区、街道,分级寻找。

    代码:level_locate.hmtl

    <html>
            <head>
                <meta http-equiv="content-type" content="text/html;charset=utf-8" />
                <title>Level Locate</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" />      
            </head>
            <body>
                <h3>Level locate</h3>
                <div class="span3">     
                    <div class="well">
                        <div class="dropdown">
                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link1</a>
                            <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" id="dropdown1" >
                                <li><a tabindex="-1" href="#">Action</a></li>
                                <li><a tabindex="-1" href="#">Another action</a></li>
                                <li><a tabindex="-1" href="#">Something else here</a></li>
                                <li class="divider"></li>
                                <li><a tabindex="-1" href="#">Separated link</a></li>
                            </ul>
                        </div>              
                    </div>          
                </div>
                <div class="span3">     
                    <div class="well">
                        <div class="dropdown">
                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link2</a>
                            <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" >
                                <li><a tabindex="-1" href="#">Action</a></li>
                                <li><a tabindex="-1" href="#">Another action</a></li>
                                <li><a tabindex="-1" href="#">Something else here</a></li>
                                <li class="divider"></li>
                                <li><a tabindex="-1" href="#">Separated link</a></li>
                            </ul>
                        </div>              
                    </div>          
                </div>
            </body>
            <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
        </html>

    HMLT打开效果如下图所示:

    上面的代码显示,页面有两个文字链接,点击两个链接会弹出一模一样的的两个下拉菜单,这两个菜单的属性基本一样。那么我如何区分找到相应的菜单项呢?由于两个下拉菜单中每个选项的link text都相同,href也一样,所以在这里就需要使用层级定位了。

    具体思路是:先点击显示出1个下拉菜单,然后再定位到该下拉菜单所在的ul,再定位这个ul下的某个具体的link。在这里,我们定位第1个下拉菜单中的Another action这个选项。

     

    # coding:utf-8
    
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from time import sleep
    import os
    
    dr=webdriver.Firefox()
    file_path='file:///'+os.path.abspath('level_locate.html')
    dr.get(file_path)
    
    #点击link链接(弹出下拉列表)
    dr.find_element_by_link_text('Link1').click()
    
    #找到id为dropdown1的元素
    WebDriverWait(dr,10).until(lambda the_driver:the_driver.find_element_by_id('dropdown1').is_displayed())
    
    #在父亲元件下找到link为Action的子元素
    menu=dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
    
    #鼠标定位到子元素上
    webdriver.ActionChains(dr).move_to_element(menu).perform()
    
    sleep(1)
    
    dr.quit()

    脚本解释:
    1、WebDriverWait(dr,10)   10秒内每隔500毫秒扫描一次页面变化,当出现元素后结束。dr已在脚本中定义。

    2、is_displayed   指该元素是否用户可见

    3、ActionChains(dr)  生成用户行为,所有行动都存储在ActionChains中,通过perform()存储的行为。

    4、move_to_element(menu)  移动鼠标到一个元素中,menu指定指向哪一个元素。to_element指元素移动到

    运行效果(下拉列表菜单处于选中状态)如下图所示:

  • 相关阅读:
    静态方法和类方法
    DEL: Restore Boxes after VirtualBox Upgrade
    DEL: IE "Your current security settings put your computer at risk. Click h
    EV: Using GitHub Repository
    EV: Windows Commands 命令
    EV: Notepad++ Regular Express syntax
    html页面的三个width: document, window, screen
    DEL: View web content zone in IE9
    EV: 关于min-width样式的使用
    EV: Linux Shell Commands
  • 原文地址:https://www.cnblogs.com/kongzhongqijing/p/3534081.html
Copyright © 2011-2022 走看看