1. #coding=utf-8
  2. from selenium import webdriver
  3. from selenium.webdriver.common.by import By
  4. from selenium.webdriver.support import expected_conditions as EC
  5. from selenium.webdriver.support.wait import WebDriverWait
  6. base_url = "http://www.baidu.com"
  7. driver = webdriver.Firefox()
  8. driver.implicitly_wait(5)
  9. '''隐式等待和显示等待都存在时,超时时间取二者中较大的'''
  10. locator = (By.ID,'kw')
  11. driver.get(base_url)
  12. WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
  13. '''判断title,返回布尔值'''
  14. WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
  15. '''判断title,返回布尔值'''
  16. WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
  17. '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
  18. WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
  19. '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
  20. WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
  21. '''判断元素是否可见,如果可见就返回这个元素'''
  22. WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
  23. '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
  24. WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))
  25. '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''
  26. WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
  27. '''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
  28. WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
  29. '''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
  30. #WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))
  31. '''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
  32. #注意这里并没有一个frame可以切换进去
  33. WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
  34. '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
  35. #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
  36. WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
  37. '''判断某个元素中是否可见并且是enable的,代表可点击'''
  38. driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
  39. #WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
  40. #WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))
  41. '''等待某个元素从dom树中移除'''
  42. #这里没有找到合适的例子
  43. WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))
  44. '''判断某个元素是否被选中了,一般用在下拉列表'''
  45. WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))
  46. '''判断某个元素的选中状态是否符合预期'''
  47. WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))
  48. '''判断某个元素的选中状态是否符合预期'''
  49. driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()
  50. instance = WebDriverWait(driver,10).until(EC.alert_is_present())
  51. '''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''
  52. print instance.text
  53. instance.accept()
  54. driver.close()
  1. selenium.webdriver.support.wait.WebDriverWait(类)
  2. __init__
  3. driver: 传入WebDriver实例,即我们上例中的driver
  4. timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
  5. poll_frequency: 调用untiluntil_not中的方法的间隔时间,默认是0.5
  6. ignored_exceptions: 忽略的异常,如果在调用untiluntil_not的过程中抛出这个元组中的异常,
  7. 则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException
  8. until
  9. method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
  10. message: 如果超时,抛出TimeoutException,将message传入异常
  11. until_not until相反,until是当某元素出现或什么条件成立则继续执行,
  12. until_not是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述。
  13. method
  14. message

显示等待:主要正对某个元素,在规定时间内,可见、可点击、等等,超出时间则抛出异常

隐士等待:主要正对整个页面,在规定时间内,整个页面加载完成,才执行下一步,超出时间则抛出异常

显示等待和隐士等待同时存在时,看谁的时间长,就取谁的等待时间

Python-selenium显示等待的更多相关文章

  1. python+selenium显示等待、隐式等待和强制等待的区别

    在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(a ...

  2. python webdriver 显示等待-自动登录126邮箱,添加联系人

    脚本内容:#encoding=utf-8#author-夏晓旭from selenium import webdriverimport timefrom selenium.webdriver.supp ...

  3. Python&Selenium智能等待方法封装

    摘要:本篇博文用几行代码展示Python和Selenium做自动化测试时常见的显示等待和封装 # 用于实现智能等待页面元素的出现 # encoding = utf-8 ""&quo ...

  4. selenium显示等待解决浏览器未加载完成查找控件的问题

    问题描述:wap版支付成功后,跳转到支付成功页,查找的元素已出现,如图的:元素1,元素2,但是提示查找的元素超时,失败,并且每到这个页面都会报页面超时,不能查找到页面元素 原始代码: try{ op. ...

  5. selenium 显示等待、隐式等待、强制等待

    如今大部分web程序使用Ajax技术,当浏览器加载页面时,页面元素可能不是同时加载完成,如果因为加载某个元素超时导致ElementNotVisibleException的情况出现,自动化脚本的稳定性就 ...

  6. Selenium 显示等待和隐式等待

    1. 设置显示等待 Java代码: 1 2 3 4 5 public static WebElement WaitForElement(WebDriver driver, String locator ...

  7. 转 Python selenium 强制等待显示等待隐式等待

    1. 1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: # -*- codi ...

  8. python selenium中等待元素出现及等待元素消失操作

    在自动化测试中,很多时候都会有等待页面某个元素出现后能进行下一步操作,或者列表中显示加载,直到加载完成后才进行下一步操作,但时间都不确定,如下图所示 幸运的是,在selenium 2后有一个模块exp ...

  9. selenium 显示等待wait.until 常用封装 及下拉框的选择操作等

    from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait a ...

  10. python webdriver 显示等待判断元素是可以被点击的,但是执行脚本时,却提示元素不能点击的解决办法?

    我之前运行没问题的环境是firefox版本50,对应的驱动是没有问题的,现在firefox自动升级到了60,驱动没有变,我试着把浏览器装回了50,再试就好了, 所以应该是浏览器跟驱动geckodriv ...

随机推荐

  1. 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings)-课程笔记

    第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings) 2.1 词汇表征(Word Representation) 词汇表示,目 ...

  2. MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)

    一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始 ...

  3. python测试http、websocket接口

    测试环境有个项目需要每天构造数据,来尽量保证测试环境和生产环境数据量保持一致.需要生成订单后商家接单完成,以下是代码,主要是用接口完成 创建订单 # coding=utf-8 import reque ...

  4. 预科班D6

    2020.09.14星期一 预科班D6 学习内容: 自习 发布小游戏 1.配置网络 #查看当前ip ifconfig #关闭NetworkManager systemctl stop NetworkM ...

  5. CentOS7使用PackageCloud安装RabbitMQ

    环境:CentOS Linux release 7.6.1810 (Core) RabbitMQ:3.7.17Erlang: 22.0.7 使用PackageCloud安装RabbitMQ是最简单的安 ...

  6. python的多种魔术方法

    目录 new str & repr iter getitem.setitem.delitem getattr.setattr.delattr call slots 定制类和魔法方法 new s ...

  7. 关于KeePass实现mstsc远程桌面(rdp协议)的自动登录

    本文的Keepass版本:KeePass Password Safe Version 2.45 首先介绍一下Keepass,引用官网的解释如下: KeePass is a free open sour ...

  8. 垃圾回收器(GC)

    分类 针对hotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC) 部分收集:不是完整收集整个Java堆的垃圾收集 ...

  9. 查看 JVM 参数的默认值

    查看初始默认值:-XX:+PrintFlagsInitial HuandeMacBook-Air:~ huanliu$ java -XX:+PrintFlagsInitial [Global flag ...

  10. 使用监听器来启动spring -------使用监听器初始化上下文参数

    问题: 数据初始化监听器要注入spring容器的对象,必须先启动spring容器才能使用监听器初始化数据. 解决: 使用监听器来启动spring框架 问题:spring框架启动需要哪些参数? 1.需要 ...