打印信息经常用的有两个:

# coding: utf-8

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 打印网页标题
title = driver.title
print title
# 打印当前url
curr = driver.current_url
print curr

打印显示为:

我们打印这些东西不是为了给自己看,而是为了做断言用,我们知道,自动化之所以叫自动化,就是中途不需要人为的操作,可是我们跳转网页怎么判断是不是跳转到正确的网页呢?当然就是网页的标题或者是url了,所以我们就可以把网站的title或者url拿出来,作为断言的内容了~

设置等待时间

实话实说,我只见过三个:

- 第一个,也是用的最多的:sleep();设置固定的休眠时间,括号里写多少秒就睡多少秒

- 第二个,implicitly_wait();它和sleep的区别就是sleep()是固定的,而implicitly_wait()是灵活的,举个例子:

# coding: utf-8

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=options)
print 1
driver.implicitly_wait(5)
print 2
driver.get("https://www.american.com")
print 3
driver.implicitly_wait(30)
print 4

从上面的例子可以看出,当加载网站的时候(因为你不翻墙上不去这个网站)会等待五秒,五秒过后才打印2,而下面等待30秒的地方根本没有等待,而是直接打印出来的,这就是网上你百度到的——隐式等待——

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显性等待wait了。

需要特别说明的是:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

- 第三个:WebDriverWait;显示等待,用法:

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

上面的绿色字体是http://www.jb51.net/article/92672.html这里引用的原文。大家可以去这篇博客里看一下,说的已经很清楚了。船长这里再给大家解释一下until()里面要怎么写:

博客里说until(或者until_not)里面的内容是可调用的,也就是说我们直接写driver.find_element_by_xpath()是不可以的,因为这样定位到的是网页中的元素,它是不可调用的;我们可以换一种方式,按照书里面的:就是当你用until时就要求until里面的方法一定要返回True;用until_not时里面就要返回False;那么怎么样返回True或False呢?很简单,只需要加上一个判断条件,比如:

  • is_displayed()  --是否展示

WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until(lambda x: x.find_element_by_id(“someId”).is_displayed())
  • title_is(u”xx”)  —标题是否是xx

  • title_contains(“xx”)  — 标题是否包含xx

  • visibility_of_element_located()  —定位到的元素是否可见

  • presence_of_element_located()  —元素是否被加到dom树里(该元素不一定可见)

  • text_to_be_present_in_element()  —某个元素的text是否包含预期的字符串

  • element_to_be_clickable()  —元素是否可见而且是enable的

方法好多,大家可以去expected_conditions方法里面看一下源码~~

另外再提醒大家看一下上面发的那篇博文,说的非常详细。如果你想知道应用的时候那个方法用的最多,那我直接告诉你——sleep...WebDriverWait之前也只是知道,但是从来没用过……一般来说大家公司的网速不会差到哪去,用sleep就够用了,当然如果你想让自己的代码高大上一点,用几个WebDriverWait也是不错的。而implicitly_wait()在整个代码里写一次就够了,其实也是挺方便的~~~我还是比较喜欢睡觉(sleep)~哈哈

微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

《selenium2 python 自动化测试实战》(6)——打印信息和设置等待时间的更多相关文章

  1. selenium python (五)打印信息及设置等待时间

    #!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #一般情况下我们要验证打开的页面是否正确,可通过网页的Title和Cur ...

  2. selenium2 python自动化测试实战(回归测试)

    selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...

  3. 船长带你看书——《selenium2 python 自动化测试实战》(1)

    有很多selenium的教程,你没有从头看,当你看的时候已经很难跟上作者的节奏了.现在,你有机会再从头学一次了.从今天开始,船长会从最基本的知识开始,和大家一起学selenium.能不能跟着一起就看大 ...

  4. Selenium2+Python自动化测试实战

    本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的 ...

  5. 《selenium2 python 自动化测试实战》(21)——unittest单元测试框架解析

    unittest是展开自动化测试的基础——这个框架很重要! 我们先自己写一个测试类: 1.被测试类 Widthget.py: # coding: utf-8 class Widthget:    de ...

  6. 《selenium2 python 自动化测试实战》(17)——几个cookies操作

    之前我们已经学过利用cookies跳过验证码登录了,那时候我们用的方法是add_cookie()方法,这里再给大家介绍两个,一般情况下我们用不到,了解一下就可以,而且如果真的用到的时候百度也很快的: ...

  7. 《selenium2 python 自动化测试实战》(10)——下拉框和alert

    # coding: utf-8 from selenium import webdriverfrom selenium.webdriver.common.action_chains import Ac ...

  8. 《selenium2 python 自动化测试实战》(7)——定位一组对象

    定位一组对象 定位一组对象——find_elements_by_...(),注意,这里是elements,复数.返回的结果是一个列表,我们取值的时候就要用列表取值的方式来获得自己想要的元素.需要注意的 ...

  9. 《selenium2 python 自动化测试实战》(4)——鼠标事件

    鼠标事件包含在ActionChains类中,导入时只需要: from selenium.webdriver.common.action_chains import ActionChains 导入类即可 ...

随机推荐

  1. Python在线教程(廖雪峰)

    http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

  2. 手机端页面自适应解决方案—rem布局(该方案目前已过时)

    转自:https://segmentfault.com/a/1190000004705207 相信很多刚开始写移动端页面的同学都要面对页面自适应的问题,当然解决方案很多,比如:百分比布局,弹性布局fl ...

  3. [Vue]使用 vue-i18n 切换中英文

    1.引入 vue-i18n  import Vue from 'vue' import VueI18n from 'vue-i18n' import merge from 'lodash/merge' ...

  4. 使用sha512算法加密linux密码

    查看当前主机的加密算法: [root@realserver ~]# authconfig --test |grep hashing password hashing algorithm is sha5 ...

  5. poj2187凸包最远点对

    暴力过了 #include<map> #include<set> #include<cmath> #include<queue> #include< ...

  6. Back Track5学习笔记

    1.BT5默认用户名:root.密码:toor(公司是yeslabccies) 2.进入图形化界面命令:startx 3.更改密码:sudo passwd root 扫描工具 第一部分网络配置: 4. ...

  7. JQuery数字类型验证正则表达式

    有朋友整了一些关于js与jquery的数字类型验证正则表达式代码,下面我给大家再整理一下. 这里包括了数字验证实现与测试实例了,大家可参考. js验证数字正则表达式 代码如下: //检测是否为数字和小 ...

  8. IOS-H5容器的一些探究:UIWebView和WKWebView的比较和选择

    一.Native开发中为什么需要H5容器 Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了 ...

  9. MyCat的分片规则

    1. 枚举法: 通过在配置文件中配置可能的枚举id,自己配置分片,使用规则: <tableRule name="sharding-by-intfile"> <ru ...

  10. asp.net连接MySQL数据库错误-Out of sync with server

    问题 网上说:http://wenda.haosou.com/q/1386389928069965 昨晚这个问题真的费了我不少时间(晚上9到凌晨2点),网上找解决方案,然后一个个尝试,没有成功.准备放 ...