这些方式仅供参考,实际使用体验并不好,最好对find_element()方法进行二次封装。

  1. # coding=utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.support import expected_conditions as EC
  6. from selenium.webdriver.support.wait import WebDriverWait
  7.  
  8. url = "http://www.baidu.com"
  9. driver = webdriver.Chrome()
  10. '''隐式等待和显示等待都存在时,超时时间取二者中较大的'''
  11. driver.implicitly_wait(5)
  12. driver.get(url)
  13. wait = WebDriverWait(driver, 10)
  14.  
  15. '''判断title,返回布尔值'''
  16. wait.until(EC.title_is(u"百度一下,你就知道"))
  17.  
  18. '''判断title,返回布尔值'''
  19. wait.until(EC.title_contains(u"百度一下"))
  20.  
  21. '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
  22. wait.until(EC.presence_of_element_located((By.ID, 'kw'))) # 注意(By.ID, 'kw')是元组
  23.  
  24. '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
  25. wait.until(EC.visibility_of_element_located((By.ID, 'su')))
  26.  
  27. '''判断元素是否可见,如果可见就返回这个元素'''
  28. wait.until(EC.visibility_of(driver.find_element(by=By.ID, value='kw')))
  29.  
  30. '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
  31. wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
  32.  
  33. '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''
  34. wait.until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR, '.mnav')))
  35.  
  36. '''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
  37. wait.until(EC.text_to_be_present_in_element((By.XPATH, "//*[@id='u1']/a[8]"),u'设置'))
  38.  
  39. '''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
  40. wait.until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, '#su'),u'百度一下'))
  41.  
  42. '''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
  43. # 注意这里并没有一个frame可以切换进去
  44. # wait.until(EC.frame_to_be_available_and_switch_to_it(locator))
  45.  
  46. '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
  47. # 注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
  48. wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
  49.  
  50. '''判断某个元素中是否可见并且是enable的,代表可点击'''
  51. wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u1']/a[8]"))).click()
  52.  
  53. '''等待某个元素从dom树中移除'''
  54. # 这里没有找到合适的例子
  55. driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
  56. # wait.until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
  57. # wait.until(EC.staleness_of(driver.find_element(By.ID,'su')))
  58.  
  59. '''判断某个元素是否被选中了,一般用在下拉列表'''
  60. wait.until(EC.element_to_be_selected(driver.find_element(By.XPATH, "//*[@id='nr']/option[1]")))
  61.  
  62. '''判断某个元素的选中状态是否符合预期'''
  63. wait.until(EC.element_selection_state_to_be(driver.find_element(By.XPATH, "//*[@id='nr']/option[1]"),True))
  64.  
  65. '''判断某个元素的选中状态是否符合预期'''
  66. wait.until(EC.element_located_selection_state_to_be((By.XPATH, "//*[@id='nr']/option[1]"), True))
  67.  
  68. '''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''
  69. gxszButton = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='gxszButton']/a[1]")))
  70. gxszButton.click()
  71. instance = wait.until(EC.alert_is_present())
  72.  
  73. print(instance.text)
  74. instance.accept()
  75. driver.close()

selenium等待方式详解的更多相关文章

  1. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  2. Python selenium 三种等待方式详解

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

  3. Selenium 三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  4. Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么 ...

  5. Selenium:三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  6. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  7. guava-retrying 源码解析(等待策略详解)

    一.等待策略相关类: 1.等待策略接口:WaitStrategy接口 该接口只有一个方法,就是返回尝试失败之后,下一次尝试之前的等待时间.long computeSleepTime(Attempt f ...

  8. vuex的使用及持久化state的方式详解

    vuex的使用及持久化state的方式详解 转载  更新时间:2018年01月23日 09:09:37   作者:baby格鲁特    我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...

  9. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

随机推荐

  1. springMVC中响应的返回值获取方式

    package com.hope.controller;import com.hope.domain.User;import org.springframework.stereotype.Contro ...

  2. 【力扣】122. 买卖股票的最佳时机 II

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...

  3. 【Java】基本语法学习笔记

    1.数组 *数组的创建 int[] array = {1,2,3,4,5}; 注意区别于C++ int a[] = (1)两种输出方法 public class number { public sta ...

  4. 【Spark】【RDD】从本地文件系统创建RDD

    练习作业 完成任务从文件创建三个RDD(math bigdata student) cd ~ touch math touch bigdata touch student pwd 启动Spark-sh ...

  5. Jenkins多分支构建

    目录 一.创建多分支pipeline 二.根据分支部署 gitlab触发与多分支 Generic Webhook多分支 一.创建多分支pipeline 在实际中,需要多分支同时进行开发.如果每个分支都 ...

  6. Python把两个列表索引相同的值相加

    方案一 list1=[1,2,3,4,5] list2=[6,7,8,9,10] list3=[] list3=[i + j for i, j in zip(list1, list2)] print( ...

  7. Latex-安装_第一天

    LaTex安装 Windows 小知识: \(Tex\)来源technology,希腊词根是\(tex\),Latex应该读成"拉泰赫". https://miktex.org/ ...

  8. [BUUCTF]PWN8——jarvisoj_level0

    [BUUCTF]PWN8--jarvisoj_level0 题目网址:https://buuoj.cn/challenges#jarvisoj_level0 步骤: 例行检查,64位,开启了NX保护 ...

  9. [BUUCTF]PWN6——ciscn_2019_c_1

    [BUUCTF]PWN6--ciscn_2019_c_1 题目网址:https://buuoj.cn/challenges#ciscn_2019_c_1 步骤: 例行检查,64位,开启了nx保护 nc ...

  10. [BUUCTF]PWN3——warmup_csaw_2016

    [BUUCTF]PWN3--warmup_csaw_2016 题目网址:https://buuoj.cn/challenges#warmup_csaw_2016 步骤: 例行检查,64位,没有开启任何 ...