6、网页中等待

作者: 测试星云 | 来源:发表于2020-02-03 12:54 被阅读0次

主要技术内容:多种等待及多窗口切换

1、定位不到可能原因?

  • 没加等待,页面没加载完成,或是元素没加载出来;
  • 有frame,其他windows
  • 你定位的选择错了:xpath写错了,定位不是这个了
  • 上次出现这个元素,这次运行元素不出现。

2、等待有几种方式

  • 强制等待
    time.sleep(3)
    死等
  • 隐性等待
driver.implicitly_wait(10)

如果页面加载上了,不需要10秒,如果页面10秒没加载完,抛异常
页面是全局的-全部加载完。
对整个driver的周期都起作用。

  • 显示等待
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path='/Users/lindafang/PycharmProjects/selenium3forpython2020/driver/chromedriver'
driver = webdriver.Chrome(executable_path=path)

# 隐式等待,全局10秒
driver.implicitly_wait(10)
driver.get("https://cn.bing.com/")

elem=driver.find_element_by_id("sb_form_q")
elem.send_keys("seleniumhq"+Keys.RETURN)
assert 'selenium' in driver.page_source

# 显示等待10秒
wait = WebDriverWait(driver,10)
original_window=driver.current_window_handle
assert len(driver.window_handles)==1
driver.find_element_by_partial_link_text("selenium中文网").click()
# 等待走到切换到第二个窗口
wait.until(EC.number_of_windows_to_be(2))
# 切换到不是原来的那个窗口
for window_handle in driver.window_handles:
    print(window_handle)
    if window_handle!=original_window:
        driver.switch_to.window(window_handle)
        break

# 等待新窗口的title包含""
wait.until(EC.title_contains("selenium中文网"))
print(driver.title)
driver.close()
driver.quit()
  • 显示等待有条件

1、验证title的,验证传入的参数title是否等于或包含在driver.title中

title_is
title_contains

2、验证元素是否出现 ,传入的参数都是元组类型的locator(By.ID,'q')

wait = WebDriverWait(driver,10)
wait.until(EC.presence_of_element_located)
wait.until(EC.presence_of_all_elements_located)

3、验证元素是否可见

wait = WebDriverWait(driver,10)
wait.until(EC.visibility_of_all_elements_located)
wait.until(EC.visibility_of_any_elements_located)
wait.until(EC.visibility_of_element_located)

4、判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value

wait = WebDriverWait(driver,10)
wait.until(EC.text_to_be_present_in_element)
wait.until(EC.text_to_be_present_in_element_value)

5、判断是否有alert出现

wait.until(EC.alert_is_present)

6、判断元素是否被选中

wait.until(EC.element_to_be_clickable)
wait.until(EC.element_to_be_selected)

附:[selenium keys模块]

Keys模块解释

NULL = '\ue000'
CANCEL = '\ue001'  # ^break
HELP = '\ue002'
BACKSPACE = '\ue003'
BACK_SPACE = BACKSPACE   #删除键
TAB = '\ue004'   #TAB键
CLEAR = '\ue005'  
RETURN = '\ue006'
ENTER = '\ue007'   #回车键
SHIFT = '\ue008'   #Shift键
LEFT_SHIFT = SHIFT
CONTROL = '\ue009'
LEFT_CONTROL = CONTROL   #Ctrl 键
ALT = '\ue00a'           #Alt 键
LEFT_ALT = ALT
PAUSE = '\ue00b'
ESCAPE = '\ue00c'   #ECS键
SPACE = '\ue00d'    #空格键 
PAGE_UP = '\ue00e'   #PgUp 键
PAGE_DOWN = '\ue00f' #PgDwon 键
END = '\ue010'    #END 键
HOME = '\ue011'   #HOME 键
LEFT = '\ue012'  #左键
ARROW_LEFT = LEFT  
UP = '\ue013'    #上键
ARROW_UP = UP   
RIGHT = '\ue014'
ARROW_RIGHT = RIGHT  #右键
DOWN = '\ue015'      #下键
ARROW_DOWN = DOWN  
INSERT = '\ue016'    #insert键 
DELETE = '\ue017'    #del键

SEMICOLON = '\ue018'  #';'键
EQUALS = '\ue019'     #'='键

#数字键盘
NUMPAD0 = '\ue01a' # number pad keys
NUMPAD1 = '\ue01b'
NUMPAD2 = '\ue01c'
NUMPAD3 = '\ue01d'
NUMPAD4 = '\ue01e'
NUMPAD5 = '\ue01f'
NUMPAD6 = '\ue020'
NUMPAD7 = '\ue021'
NUMPAD8 = '\ue022'
NUMPAD9 = '\ue023'
MULTIPLY = '\ue024' # '*' 键
ADD = '\ue025' # '+' 键
SEPARATOR = '\ue026' #','键
SUBTRACT = '\ue027' # '-' 键
DECIMAL = '\ue028' # '.'键
DIVIDE = '\ue029' #'/'键

F1 = '\ue031'  # function  keys
F2 = '\ue032'
F3 = '\ue033'
F4 = '\ue034'
F5 = '\ue035'
F6 = '\ue036'
F7 = '\ue037'
F8 = '\ue038'
F9 = '\ue039'
F10 = '\ue03a'
F11 = '\ue03b'
F12 = '\ue03c'

META = '\ue03d'
COMMAND = '\ue03d'

操作组合键:</pre>

send_keys(Keys.CONTROL,'a')   #全选(Ctrl+A)

send_keys(Keys.CONTROL,'c')   #复制(Ctrl+C)

send_keys(Keys.CONTROL,'x')   #剪切(Ctrl+X)

send_keys(Keys.CONTROL,'v')   #粘贴(Ctrl+V)

          回车键 Keys.ENTER

          删除键 Keys.BACK_SPACE

          空格键 Keys.SPACE

          制表键 Keys.TAB

          回退键 Keys.ESCAPE

          刷新键 Keys.F5
send_keys("seleniumhq"+Keys.RETURN)
send_keys(Keys.CONTROL,'a') 

相关文章

  • 6、网页中等待

    主要技术内容:多种等待及多窗口切换 1、定位不到可能原因? 没加等待,页面没加载完成,或是元素没加载出来; 有fr...

  • 基于VBA for Excel批量下载图片教程系列(十五)——生

    有时候,我们下载某个网页的图片后,发现只有配合着网页中的文字才有更好的体验,难道我们还要再重新打开网页,等待图片的...

  • 第一个自动化测试脚本

    案例: 启动火狐浏览器, 首先打开我要自学网页面,打印网页标题,等待3秒 打开百度首页,打印网页标题,再等待2秒 ...

  • 分布式爬虫算法对比

    *广度优先搜索策略,将网页的所有链接都保存到等待队列中,该算法偏向于覆盖更广的网页,对下一级的访问会有一定的延迟。...

  • Python冒泡排序

    下载Jenkins.war,部署到Tomcat下面。在浏览器中访问Jenkins目录。 等待网页初始化成功,直到出...

  • 2019-02-27

    爬虫遇到的问题:关于网页需要跳转后才能访问的问题 有时候访问一些网页,显示网页需要等待5s才能跳转到所需要的网页:...

  • 6 等待

    在我跟赵丹心先后分手后,我对这方面的事情暂时没有了之前的兴趣,我更多的时候会出现在图书馆,不要误会,只是为了免费看...

  • 手把手教你 WordPress 使用阿里云 CDN 教程,让你的

    研究表明,用户最满意的打开网页时间,是在 2 秒以下。用户能够忍受的最长等待时间在 6~8 秒之间。就是说,8 秒...

  • 老毛子路由自动更新

    老毛子路由自动更新 1.打开路由的网页终端 开启网页终端之后,需要等待30秒 2.在网页终端输入脚本 image

  • 页面跳转并返回数据

    异步请求和等待 Dart中的异步请求和等待和ES6中的方法很像,直接使用async...await就可以实现。比如...

网友评论

    本文标题:6、网页中等待

    本文链接:https://www.haomeiwen.com/subject/nahcxhtx.html