多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

selenium-webdriver(python)—层级定位

更新时间:2022-05-17 09:00:10 作者:多测师 浏览:77

  场景:

  假如两个控件,他们长的一模样,还都叫“张三”,唯一的不同是一个在北京,一个在上海,那我们就可以通过,他们的城市,区,街道,来找到他们。

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

selenium-webdriver(python)—层级定位

<html>

    <head>

        <meta http-equiv="content-type" content="text/html;charset=utf-8" />

        <title>Level Locate</title>       

        <script type="text/javascript" async="" src="http://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>

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

这里自制了一个页面,上面有两个文字链接,点击两个链接会弹出一模一样的的两个下拉菜单,这两个菜单的属性基本一样。那么我如何区分找到相应的菜单项呢?

  方法如下:

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

import time

import os

dr = webdriver.Firefox()

file_path =  'file:///' + os.path.abspath('level_locate.html')

dr.get(file_path)

#点击Link1链接(弹出下拉列表)

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()

time.sleep(2)

dr.quit()

  定位思路:

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

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

  虽然我每行代码前叫了注释,但可能还是不太容易理解,因为里面多了不少以前没见过的新东东。

  WebDriverWait(dr, 10)

  10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。dr就不解释了,前面操作webdriver.firefox()的句柄

  is_displayed()

  该元素是否用户可以见

  class ActionChains(driver)

  driver: 执行用户操作实例webdriver

  生成用户的行为。所有的行动都存储在actionchains对象。通过perform()存储的行为。

  move_to_element(menu)

  移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素

  to_element:元件移动到

  perform()

  执行所有存储的行为

  以上内容为大家介绍了自动化测试中的selenium-webdriver(python)—层级定位,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部