zoukankan      html  css  js  c++  java
  • 《selenium2 python 自动化测试实战》(6)——打印信息和设置等待时间

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

    # 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)~哈哈

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

  • 相关阅读:
    ps命令详解
    要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...
    Centos IP、DNS设置
    查看服务器 硬件参数命令(持续更新)
    Linux系统下配置短信猫
    vimrc 设置
    linux关于bashrc与profile的区别(转)
    Unix 设计哲学基础
    13年计算机真题
    华为卓越工作法读后感
  • 原文地址:https://www.cnblogs.com/captainmeng/p/7883326.html
Copyright © 2011-2022 走看看