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

# 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. Kubernetes容器运行时(CRI)简介

    Kubernetes节点的底层由一个叫做“容器运行时”的软件进行支撑,它负责比如启停容器这样的事情.最广为人知的容器运行时当属Docker,但它不是唯一的.事实上,容器运行时这个领域发展迅速.为了使K ...

  2. 第四章 SSL和Proxy高级选项

    在前一章,我们已经学习了HTTP消息如何通过Burp Proxy进行拦截和处理,本章我们将继续学习HTTPS协议消息的拦截和处理. HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入 ...

  3. [MyEclipse]转:设置注释格式

    Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit ...

  4. Ubuntu14.04安装CUDA6.5

    机器配置: 双系统:win10 64bit+ ubuntu14.04 LTS 64bit 显卡: GeForce 405 cuda版本: cuda 6.5 参考: http://m.blog.csdn ...

  5. oom_killer

    Limited Memory 今天在虚拟机里面用Word处理文档的时候,突然硬盘灯一阵狂闪,然后虚拟机就一起消失了. 这种事情屡见不鲜,很明显是Linux内核把占用最多内存的程序(这次是Virtual ...

  6. Linux操作系统简介

    一:Linux系统概述 1.常见操作系统 - 服务端操作系统 : linux.unix.windows server - 单机操作系统 : windows(dos .ucdos.win95.win98 ...

  7. 字符串方法之-indexOf、lastIndexOf、等等一些方法

    1.indexOf():方法可返回某个指定的字符串值在字符串中首次出现的位置(从左往右找). 语法:stringObject.indexOf(searchvalue,fromindex) <sc ...

  8. RxJava 中的Map函数原理分析

    首先看一段Map函数的使用代码: Observable.create(new Observable.OnSubscribe<Integer>() { @Override public vo ...

  9. 【sql】使用触发器

    今天在写sql触发器时遇到这样一个问题: 利用完整性规则创建教师表,包括(教师工号,姓名,性别,职称,工资),在此基础上定义触发器,为教师表Teacher定义完整性规则“教授的工资不能低于4000元, ...

  10. windows的虚拟磁盘(vhd,vhdx)使用

    以前一直使用u盘或者移动硬盘接上usb直接拷贝文件,发觉速度一般.而且一般只有一个盘,分类也很不方便. 后来发现windows的虚拟磁盘可以解决我的问题... 经过一段时间的使用后发觉使用虚拟磁盘的方 ...