zoukankan      html  css  js  c++  java
  • Webdriver API之操作(一)

    一. 控制浏览器

    1. 控制浏览器大小

    driver.set_window_size(480,800)  #浏览器宽480,高800显示

    dirver.maximize_window()  #浏览器最大化显示

    2. 后退、前进

    driver.back()

    driver.forward()

    3. 浏览器刷新(F5)

    driver.refresh()

    二、  简单元素操作:find_element_by_id("xx").+ ?

    clear()    清除文本

    send_keys(*value)   模拟按键输入 

    click()    单击元素

    size  返回元素的尺寸

    text  获取元素的文本

    get_attribute(name)  获取name的属性值

    is_displayed()  该元素是否可见

    三、 鼠标操作

    关于鼠标操作的方法封装在ActionChains类中,所以要引用这个类

    perform()    执行所有ActionChains种存储的行为

    context_click()    右击

    double_click()    双击

    drag_and_drop()    拖动

    move_to_element()    鼠标悬停

    1 from selenium import webdriver #引入ActionChains类 
    2 from selenium.webdriver.common.action_chains import ActionChains
    3 
    4 driver = webdriver.Chrome() driver.get("http://yunpan.360.cn")
    5 #定位到要右击的元素 
    6 right_click =driver.find_element_by_id("xx") 
    7 #对定位到的元素执行鼠标右键操作,调用ActionChains()类,将驱动driver作为参数传入
    8 ActionChains(driver).context_click(right_click).perform()
    鼠标右击操作
    1 # ====同上,定位要悬停的元素
    2 above = driver.find_element_by_id("id")
    3 # 对元素执行悬停操作
    4 ActionChains(driver).move_to_element(above).perform()
    鼠标悬停
    1 # ====同上,定位要双击元素
    2 double_click = driver.find_element_by_id("id")
    3 # 对元素执行双击操作
    4 ActionChains(driver).double_click(double_click).perform()
    双击操作
    1 #===同上,定位元素的原位置
    2 element = driver.find_element_by_id("id")
    3 
    4 # 定位元素要移动到的目标位置
    5 target = driver.find_element_by_id("xx")
    6 
    7 # 执行元素的拖放操作
    8 ActionChains(driver).drag_and_drop(element,target).perform()
    鼠标拖放操作

    四、 键盘事件

     1 …… #coding=utf-8 
     2 from selenium import webdriver 
     3 #引入Keys模块 
     4 from selenium.webdriver.common.keys import Keys
     5 
     6 
     7 driver = webdriver.Firefox() driver.get("http://www.baidu.com")
     8 
     9 #输入框输入内容 driver.find_element_by_id("kw").send_keys("seleniumm")
    10 
    11 #删除多输入的一个m driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
    12 
    13 #输入空格键+“教程” driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys(u"教程")
    14 
    15 #ctrl+a 全选输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
    16 
    17 #ctrl+x 剪切输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
    18 
    19 #ctrl+v 粘贴内容到输入框 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
    20 
    21 #通过回车键盘来代替点击操作 driver.find_element_by_id("su").send_keys(Keys.ENTER)
    22 
    23 driver.quit()
    键盘事件示例

    fromselenium.webdriver.common.keys importKeys
    在使用键盘按键方法前需要先导入 keys 类包。
    下面经常使用到的键盘操作:
    send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
    send_keys(Keys.SPACE) 空格键(Space)
    send_keys(Keys.TAB) 制表键(Tab)
    send_keys(Keys.ESCAPE) 回退键(Esc)
    send_keys(Keys.ENTER) 回车键(Enter)
    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)
    send_keys(Keys.F1) 键盘 F1
    ……
    send_keys(Keys.F12) 键盘 F12

    五. 获得验证信息(titile、URL、TEXT)

    driver.titile    # 获取当前页面title

    driver.current_url  # 获取当前页面URL

    driver.find_element_by_id("kw").text  #获取当前元素的文本

    六. 设置元素等待

    1. 显式等待

    使webdriver等待某个条件成立时继续执行,即默认每隔一段时间检测一次until True,否则在达到最大时长抛出超时异常(TimeoutException)

     1 #coding=utf-8
     2 
     3 from selenium import webdriver from selenium.webdriver.common.by import By
     4 
     5 from selenium.webdriver.support.ui import WebDriverWait
     6 
     7  
     8 
     9 from selenium.webdriver.support import expected_conditions as EC  #导入EC
    10 
    11 driver = webdriver.Chrome()
    12 
    13 driver.get("http://www.baidu.com")
    14 
    15 # 超时时间5s内,检测间隔0.5S,直到“kw”元素存在,超时不存在抛出异常
    16 element = WebDriverWait(driver,5,0.5).until(
    17 
    18       EC.presence_of_element_located((By.ID,"kw"))
    19 
    20 )
    21 
    22 element.send_keys('selenium')
    23 
    24 driver.quit()
    显式等待示例

    在本例中,我们在使用 expected_conditions 类时对其时行了重命名,通过 as 关键字对其重命名为 EC, 并调用 presence_of_element_located()判断元素是否存在。

    详情请看下面:

    WebDriverWait类是由WebDriver提供的等待方法,

    WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None).until()

    driver - WebDriver 的驱动程序(Ie, Firefox,Chrome 等)
    timeout - 最长超时时间,默认以秒为单位
    poll_frequency  - 休眠时间的间隔(步长)时间,默认为 0.5 秒
    ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。

    until()
    WebDriverWait()一般由 until()(或 until_not())方法配合使用,下面是 until()和 until_not()方法的说明。
    until(method,message=’’)
    调用该方法提供的驱动程序作为一个参数,直到返回值为 Ture。
    until_not(method,message=’’)
    调用该方法提供的驱动程序作为一个参数,直到返回值为 False。

    expected_conditions     类提供一些预期条件的实现:
    title_is             用于判断标题是否 xx。
    title_contains         用于判断标题是否包含 xx 信息。
    presence_of_element_located 元素是否存在。
    visibility_of_element_located   元素是否可见。
    visibility_of           是否可见

    presence_of_all_elements_located    判断一组元素的是否存在

    text_to_be_present_in_element     判断元素是否有 xx 文本信息
    text_to_be_present_in_element_value   判断元素值是否有 xx 文本信息
    frame_to_be_available_and_switch_to_it 表单是否可用,并切换到该表单。
    invisibility_of_element_located       判断元素是否隐藏
    element_to_be_clickable         判断元素是否点击,它处于可见和启动状态
    staleness_of               等到一个元素不再是依附于 DOM。
    element_to_be_selected         被选中的元素。
    element_located_to_be_selected     一个期望的元素位于被选中。
    element_selection_state_to_be     一个期望检查如果给定的元素被选中。
    element_located_selection_state_to_be 期望找到一个元素并检查是否选择状态
    alert_is_present             预期一个警告信息

    2. 隐式等待

    隐式等待式通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。

    Webdriver提供了implicitly_wait()方法来实现。它不针对页面上的某一元素进行等待,轮询的方式不断地判断元素是否被定位到。

    driver.implicitly_wait(10)  默认秒为单位

    3. sleep休眠方式

    由Python的time模块提供,默认秒为单位

     sleep(2)

    七、多表单切换

    在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,webdriver只能在一个页面上对元素识别与定位,所以需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

    最后可以通过switch_to.parent_content()方法跳出当前一级表单——对应离它最近的switch_to.frame()方法。

    切换iframe方法如下:

    1. switch_to.frame()默认可以直接取表单的id或name属性:

    1 #切换到iframe(id = "if")
    2 driver.switch_to_frame("if")
    3 
    4 #切换到iframe(name = "nf")
    5 driver.switch_to_frame("nf")

    2. 如果ifame没有可用的id和name属性,则可以通过下面的方式进行定位。

    1 #先通过xpth定位到iframe 
    2 xf = driver.find_element_by_xpath('//*[@class="if"]')
    3 
    4 #再将定位对象传给switch_to_frame()方法 driver.switch_to_frame(xf) 
    5 …… 
    6 driver.switch_to_default_content()

    八、 多窗口切换

    Webdriver提供了switch_to.window()方法,可实现两个窗口之间的切换。

     1 #coding=utf-8 
     2 from selenium import webdriver
     3 driver = webdriver.Firefox() 
     4 driver.implicitly_wait(10) driver.get("http://www.baidu.com")
     5 
     6 #获得百度搜索窗口句柄 
     7 sreach_windows= driver.current_window_handle
     8 
     9 driver.find_element_by_link_text(u"立即注册").click()
    10 
    11 #获得当前所有打开的窗口的句柄 
    12 all_handles = driver.window_handles
    13 #进入注册窗口 
    14 for handle in all_handles: 
    15     if handle != sreach_windows:
    16         driver.switch_to_window(handle) 
    17         print '注册窗口!' 
    18         #……
    19 #进入搜索窗口 
    20 for handle in all_handles: 
    21     if handle == sreach_windows:
    22         driver.switch_to_window(handle) 
    23         print '搜索窗口!'
    24     
    25 driver.quit()
    26               
    多窗口切换

    window_handles:返回所有窗口的句柄到当前会话

    current_window_handle:获得当前窗口句柄

    switch_to.window():用于切换到相应的窗口

    九、警告框处理

    处理JavaScript所声称的alert、confirm以及prompt十分简单,使用switch_to_alert()方法定位到alert、confirm以及prompt;

    然后使用以下方法进行操作:

    text:返回alert、confirm以及prompt中的文字信息

    accept():接受现有的警告框

    dismiss():解散现有警告框

    send_keys(KeyToSend):发送文本至警告框。

    例:

    1 driver.switch_to_alert().accept()
  • 相关阅读:
    A1042 Shuffling Machine (20)
    【SSM 4】Mybatis逆向生成工具
    【SSM 4】Mybatis逆向生成工具
    【SSM 3】Mybatis应用,和Hibernate的区别
    【SSM 3】Mybatis应用,和Hibernate的区别
    【SSM 2】spring常用注解
    【SSM 2】spring常用注解
    【SSM 1】SpringMVC、Spring和Struts的区别
    【SSM 1】SpringMVC、Spring和Struts的区别
    【java基础 5】树形结构数据加载的思考
  • 原文地址:https://www.cnblogs.com/hlphlp/p/6498549.html
Copyright © 2011-2022 走看看