轻松自动化
来源:互联网 发布:仿真抢专卖店军用淘宝 编辑:程序博客网 时间:2024/04/28 23:16
本节要解决的问题:
- 层级定位
场景:
假如两个控件,他们长的一模样,还都叫“张三”,唯一的不同是一个在北京,一个在上海,那我们就可以通过,他们的城市,区,街道,来找到他们。
在实际的测试中也经常会遇到这种问题:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个。由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位。先定位父元素,然后再通过父元素定位子孙元素。
<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 webdriverfrom selenium.webdriver.support.ui import WebDriverWaitimport timeimport osdr = 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()
执行所有存储的行为
------------------------------需要我们日常工作中细细品味、慢慢消化这些函数的用法
其实,啰嗦了这么多,我们只是想达到一种效果,“下拉列表中Action选项处于被选中状态”,通过鼠标移动到选项上就达到到了这种效果,但通过程序模拟确实比较麻烦:
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 轻松自动化
- 轻松自动化
- 轻松自动化
- 轻松自动化
- 轻松自动化
- 自动化操作轻松入门系列
- 助您轻松完成自动化功能测试
- AutoHotkey/AutoIt自动化操作轻松入门系列
- 轻松自动化---selenium-webdriver(python) (一)
- 轻松自动化---selenium-webdriver(python) (二)
- 轻松自动化---selenium-webdriver(python) (一)
- 轻松自动化---selenium-webdriver(python) (二)
- 轻松自动化---selenium-webdriver(python) (三)
- 轻松自动化---selenium-webdriver(python) (五)
- 轻松自动化---selenium-webdriver(python) (六)
- 轻松自动化---selenium-webdriver(python) (七)
- 轻松自动化---selenium-webdriver(python) (八)
- 轻松自动化---selenium-webdriver(python) (十)
- (转载)cocos2d-X学习之主要类介绍:场景(CCScene)
- Linux系统脚本的三种执行方式
- 面试有感
- action outlet 委托delegate
- uva10054 The Necklace (欧拉回路路径输出 (并查集 + DFS) || (DFS + stack))
- 轻松自动化
- 输入框(input)光标显示流程
- POJ 1844 Sum
- 防止模板代码膨胀
- HDU1242 Rescue
- 最大M子段和 辅助数组降低时间复杂度
- 自己对于使用showDialog()创建对话框的原理的一些粗略拆解
- Debug 与 Release 版本 变量 初始化(zz)
- Server Develop (八) IOCP模型