一.设置等待

#coding=utf-8

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep driver=webdriver.Chrome()
driver.get('http://www.baidu.com') #添加智能等待
driver.implicitly_wait(3)
driver.find_element_by_id("su").click() #添加固定等待
sleep(3)
driver.find_element_by_link_text("登录").click() #使用WebDriverWait方法,和until(method,message)以及 until_not(method,message),lambda提供一个运行时创建动态函数的方法
element=WebDriverWait(driver,5).until(lambda x:x.find_element_id("TANGRAM__PSP_2__closeBtn"))
element.click()

二. 多选框,组对象

新建文件checkbox.html

<html  lang="zh-cn">
<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="r" />
</div>
</div>
</form>
</div>
</body>
</html>

  创建elements.py

# -*- coding: cp936 -*-
# coding =utf-8
from selenium import webdriver
import os
#path.abspath()获取当前路径下的文件,所以html文件必须和本文件地址一致
driver=webdriver.Chrome()
file_path='file:///'+os.path.abspath("checkbox.html")
driver.get(file_path) #选择页面标签元素为 input的
#len为显示长度,pop删除指定位置的元素,默认为最后一个,由0开始

inputs=driver.find_elements_by_tag_name('input')
for input in inputs:
if input.get_attribute('type')=='checkbox':
input.click()
print len(driver.find_elements_by_css_selector('input[type=checkbox]'))
print driver.find_elements_by_css_selector('input[type=checkbox]').pop(0).click() #或者可以直接定位复选框
inputs=driver.find_elements_by_css_selector('input[type=checkbox]')
#报错内容:TypeError: 'WebElement' object is not iterable,用elements 而不是 element
#对于以:结尾的,次行需要缩进

三.层级定位,子元素属性相同的,先定位父元素,再定位子元素,二级定位

创建locate.html

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

  

思路:找到第一个下拉框,确定ul,定位子菜单

脚本编写如下:

#coding=utf-8

from  selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
import os dr=webdriver.Chrome()
file_path='file:///'+os.path.abspath('secondlocate.html')
dr.get(file_path) #点击link1链接(直接用click,使之弹出子菜单)
dr.find_element_link_text('link1').click() #查找父元素的子元素,先定位下拉菜单,再定位选项,二级定位!!!
submenu=dr.find_element_by_id('dropdown1').find_element_by_link_text('Another action') #鼠标移动到子元素上并点击,ActionChains(dr)生成用户实例,存储鼠标对象,move_to_element用于鼠标移动到元素上,perform用于执行存储元素的行为
ActionChains(dr).move_to_element(submenu).perform() sleep(3)
dr.quit()

 四.html中嵌套html,即iframe,常见有UE编辑器(使用dr.swicth_to_frame(frame的id))

frame.html (f1)镶嵌  inner.html(f2)

frame.html

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>frame</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" />
<script type="text/javascript">
$(document).ready(function(){
});
</script>
</head>
<body>
<div class="row-fluid">
<div class="span10 well">
<h3>frame</h3>
<iframe id="f1" src="inner.html" width="800",
height="600"></iframe>
</div>
</div>
</body>
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
</html>

  inner.html

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>inner</title>
</head>
<body>
<div class="row-fluid">
<div class="span6 well">
<h3>inner</h3>
<iframe id="f2" src="http://www.baidu.com" width="700"
height="500"></iframe>
<a href="javascript:alert('watir-webdriver better than
selenium webdriver;')">click</a>
</div>
</div>
</body>
</html>

  效果图如下:

frame.py

#encoding=utf-8
from selenium import webdriver
from time import sleep
import os dr=webdriver.Chrome()
file_path='file:///'+os.path.abspath('frame.html')
dr.get(file_path) #找到页面,等待,frame中,f1嵌套f2,f2里面显示的是百度首页,用dr.switch_to_frame()即可
dr.implicitly_wait(30)
#先找到f1,再找到f2
dr.switch_to_frame("f1")
dr.switch_to_frame("f2")
#定位元素即可
dr.find_element_by_id("kw").send_keys("haha")
dr.find_element_by_id("su").click() dr.quit()

  

 

python实例编写(2)--等待,一组对象,层级元素,frame对象处理的更多相关文章

  1. python实例编写(7)---测试报告与测试套件(多个py文件,1个py文件内多个用例)

    一.  一个.py文件批量执行测试用例(一个.py文件下多个用例执行) 如果直接使用:unittest.main(),则按字母顺序执行, 对于前后之间又依赖关系的用例,需要按特定的顺序执行,则使用 s ...

  2. python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)

    ---恢复内容开始--- 一.python单元测试实例介绍 unittest框架又叫PyUnit框架,是python的单元测试框架. 先介绍一个普通的单元测试(不用unittest框架)的实例: 首先 ...

  3. python实例编写(1)--浏览器操作,元素操作

    一.浏览器操作 1.  back()与 forward() #coding=gbk //编码不一定是utf-8 from selenium import webdriver //导入包,也叫”模组“ ...

  4. python实例编写(5)--异常处理,截图,用例设计

    一.python的异常处理 异常抛出处理机制: 1.若在运行时发生异常,解释器会查找相应的处理语句(handler) 2.若在当前函数无法找到,就将异常传给上层的调用函数,看是否能处理 3.如果在最外 ...

  5. python实例编写(4)--js,滚动条,cookie,验证码,获取特定属性的元素,实现原理

    一.调用js 执行方法:execute_script(script,*args) 场景一:在页面上直接执行调用js 场景二:在定位的某个元素上执行调用js 如:掩藏文字(提示插件 tooltip设置淡 ...

  6. python实例编写(3)--对话框,多窗口,下拉框,上传文件

    一.对话框: 例:点击百度的登录,弹出的小窗口 #coding=utf-8 from selenium import webdriver from time import sleep dr=webdr ...

  7. frameset和iframe--框架对象及元素标签对象

    chrome不兼容:不支持跨frame的变量的获取 var oParent = parent.document.getElementById('contentFrm'); //frameset标签对象 ...

  8. dom对象详解--document对象(三)

     form对象 form对象代表一个HTML表单,在HTML文档中<form>每出现一次,form对象就会被创建.从dom对象层次图看,document.forms对象是当前文档所有for ...

  9. Python实例:贪吃蛇(简单贪吃蛇编写)🐍

    d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...

随机推荐

  1. 一篇深入剖析PCA的好文

    主成分分析(Principal components analysis)-最大方差解释 在这一篇之前的内容是<Factor Analysis>,由于非常理论,打算学完整个课程后再写.在写这 ...

  2. 在配置wem.xml后,Tomcat遇到问题,启动失败的解决方法

    前两天在写程序时,碰到了Tomcat无法启动的问题,就是在配置完web.xml后.想必好多小伙伴都有遇到吧. 如图: 出现这个错误的原因是:在配置web.xml的时候出现了错误! 如图所示,没有修改这 ...

  3. centos下安装jenkins

    To use this repository, run the following command: sudo wget -O /etc/yum.repos.d/jenkins.repo https: ...

  4. python 学习网站

    python 文档库 docs.python.org/2/library/index.html python 第三方模块查找 pypi.python.org

  5. SUID SGID

    SUID 1.只作用在可执行二进制文件上,普通用户需要对该文件有x权限, 2.在执行该文件时,用户身份切换为文件owner: 3.执行完毕,切换回普通用户. 一.查找具有SUID权限的系统文件(-40 ...

  6. 【Ubuntu 16】安装eclipse

    1.将eclipse.tar.gz传送到/home/xxx/下,解压缩,这里我已经配置好了JDK1.7,所以eclipse配置了就可以使用 2.创建快捷方式 dream361@master:~$ to ...

  7. VMware Workstation 12 Pro 之安装林耐斯Debian X64系统

    VMware Workstation 12 Pro 之安装林耐斯Debian X64系统... --------------------- 看到它的LOGO就很喜欢: ---------------- ...

  8. 使用Java模拟一个简单的Dos学生成绩管理系统:

    使用Java模拟学生成绩管理系统... ------------------- 学生成绩管理系统:需要实现的功能:1.录入学生的姓名和成绩2.显示列表.列表中包括学生姓名与成绩3.显示最高分.最低分的 ...

  9. WeQuant交易策略—RSI

    RSI指标策略 策略介绍 RSI(相对强弱指标),是通过一段时期内的平均收盘上涨和下跌数,计算价格上涨所产生的波动占整个波动的百分比,来分析市场买卖盘的意向和实力. 计算公式(以日为单位举例) RSI ...

  10. Thinkjs学习2—数据库的配置

    以github登录认证为例,说明如何通过mvc三部分的配合,实现这个功能. 要实现的功能:首页判断用户是否登录,如果没有登录,显示登录界面,用户点击按钮进入github登录验证,并保存用户的信息,登录 ...