• selenium2学习:浏览器控制、简单操作、鼠标事件和键盘事件、获得验证信息、设置元素等待


    1.1.1      浏览器窗口大小set_windows_size()

    # coding=utf-8

    from selenium import webdriver

    driver = webdriver.Chrome()

    driver.get("http://news.baidu.com/")

    driver.set_window_size(480,800)  #设置浏览器大小为移动端样式

    driver.maximize_window()  #设置浏览器全屏显示

    1.1.2      浏览器前进、后退

    driver.back()

    driver.forward()

    1.1.3      浏览器刷新

    driver.refresh()

    1.2     简单元素操作

    clear()             #清空

    send_keys(“value”)   #输入值

    click()              #点击 (按钮、图片、复选框、单选框、下拉框等)

    1.2.1      WebElement接口常用方法

    submit()                 #提交表单

    元素.size                #返回元素尺寸

    元素.text                #获取元素文本

    元素.get_attribute(name)  #获取name属性值 如:.get_attribute(‘type’)

    元素.is_displayed         #返回该元素是否用户可见(可见:True)

    1.3     鼠标事件

    鼠标操作的方法封装在ActionChains类。

    引入ActionChains:

    from selenium.webdriver.common.action_chains import ActionChains

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

    context_click()  右击

    double_click()  双击

    move_to_element()  鼠标悬停

    drag_and_drop()  拖动

    例如:

    元素a = driver.find_element_by_id(‘xx’)

    元素b = driver.find_element_by_id(‘ww’)

    1.3.1      右击a

    ActionChains(driver).context_click(a).perform()

    1.3.2      双击a

    ActionChains(driver). double_click(a).perform()

    1.3.3      悬停a

    ActionChains(driver). move_to_element(a).perform()

    1.3.4      拖动a至b

    ActionChains(driver). drag_and_drop(a,b).perform()

    1.4     键盘事件

    #引入键盘事件

    from selenium.webdriver.common.keys import keys

    常见操作:

    Send_keys(keys.BACK_SPACE)                删除键

    send_keys(Keys.SPACE)                             空格键

    send_keys(Keys.TAB)                                制表键

    send_keys(Keys.ESPACE)                           回退键

    send_keys(Keys.ENTER)                            回车键

    send_keys(Keys.CONTROL,'a')                     全选

    send_keys(Keys.CONTROL,'c')                     复制

    send_keys(Keys.CONTROL,'x')                     剪切

    send_keys(Keys.CONTROL,'v')                     粘贴

    send_keys(Keys.F1)                                 F1

    1.5     获得验证信息

    获得title、url、或text进行验证。

    • driver.title
    • driver.current_url
    • 元素.text

    以上示例:

    # 003:浏览器大小、拖动滚动条、全屏、获取浏览器titile、url、
    # coding=utf-8
    from selenium import webdriver
    from time import *
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com/")
    driver.maximize_window()         #设置浏览器全屏显示
    sleep(1)
    driver.find_element_by_id("kw").send_keys("selenium2")
    driver.find_element_by_id("su").click()
    driver.set_window_size(480,800)  #设置浏览器大小为移动端样式
    sleep(1)
    # 通过javascript设置浏览器窗口的滚动条 注:window.scrollTo(水平滚动条的距离,垂直滚动条的距离)
    js = "window.scrollTo(100,450);"
    driver.execute_script(js)
    sleep(1)
    print(driver.title)
    print(driver.current_url)
    driver.find_element_by_id("kw").clear()
    driver.find_element_by_id("kw").send_keys("pycharm")
    driver.find_element_by_id("su").submit()
    sleep(1)
    driver.back()                   #浏览器后退
    sleep(1)
    driver.forward()                #浏览器后退
    sleep(1)
    driver.quit() 

    1.6     设置元素等待

    1.6.1      显示等待

    webdriver等待某个条件成立时继续执行,否则在达到最大时长的时候抛出TimeoutException。

    # 引入元素等待方法

    from selenium.webdriver.support.ui import WebDriverWait

    WebDriverWait类由webdriver提供的等待方法,在设置的时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超出设置的时间为检测出元素,则抛出异常。语法如下:

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

    • driver:浏览器驱动
    • timeout:超时时间,单位为秒
    • poll_frequency:检测的间隔时间,默认为0.5s
    • ignored_exceptions:超时后抛得异常,默认情况下抛NoSuchElementException.

    WebDriverWait()一般由until()或until_not()配合使用。

    • until(method,massage’’):调用该方法提供的驱动程序作为一个参数,直至返回值为True
    • until_not(method,massage’’):调用该方法提供的驱动程序作为一个参数,直至返回值为False
    # 004:WebDriverWait使用
    # coding=utf-8
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com/")
    e = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'kw')))
    e.send_keys('JLL')

    1.6.1.1       expected_conditions

    expected_conditions类提供的预期条件判断的方法

    title_is 判断当前页面的标题是否等于预期

    title_contains 判断当前页面标题是否包含预期字符串

    presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见

    visbility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)

    visbility_of  与上一个方法作用相同,只是接收参数不同。上一个接收参数是定位,这一个参数是定位后的元素

    presence_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。只要有1个就返回True

    text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串

    text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串

    frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回True并且switch进去,否则返回False

    invisbility_of_element_located 判断某个元素是否不存在于DOM树或不可见

    element_to_be_clickable() 判断某个元素是否可见并且是可以点击的

    staleness_of 等到一个元素从DOM树中移除,判断一个元素是否仍在DOM,可判断页面是否已经刷新

    element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表

    element_selection_state_to_be 判断某个元素的选中状态是否符合预期,传入元素对象以及状态,相等返回True,否则返回False

    element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数是定位后的元素,该方法接收的参数是定位

    alert_is_present 判断页面上是否存在alert

    例如:

    Ele = WebDriverWait(driver, 5,0.5).until(EC. presence_of_element_located(By.ID,’wk’))

    1.6.1.2       is_displayed

    # is_displayed:and try:……except
    # coding=utf-8
    from selenium import webdriver
    from time import sleep, ctime
    
    driver = webdriver.Chrome()
    driver.get("http://news.baidu.com/")
    
    for i in range(10):
        try:
            el = driver.find_element_by_id('s_btn_wr2')
            if el.is_displayed():
                break
        except: pass
        sleep(1)
    else:
        print('time out')
    driver.close()

    1.6.2      隐式等待

    通过设定的时长等待页面元素加载完成。如果超过设定时间还未加载完成,抛出NoSuchElementException。webdriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0.

    # 006:隐式等待 and NoSuchElementException
    # coding=utf-8
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from time import ctime
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)       #设置隐式等待5秒
    driver.get("http://news.baidu.com/")
    
    try:
        print(ctime())
        driver.find_element_by_id("ww2").send_keys("selenium2")
    except NoSuchElementException as e:
        print(e)
    finally:
        print(ctime())
    driver.quit()

     

    1.6.3      sleep休眠

    # 引入sleep()方法

    from time import sleep

    sleep(2)   固定休眠2秒

  • 相关阅读:
    随笔12 java反射机制
    随笔11 J2EE中常用的名词解释
    随笔⑩ java中的基本数据类型的基础知识
    随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量 java中的方法 --- 类方法(静态方法),final方法,成员方法(实例方法),构造方法
    随笔⑧ java中的存根类 --- Stub
    随笔⑦ Java中的比较 ==,equals以及精度对比较的影响
    随笔⑥ 关于线程 --- 线程操作的主要方法
    Jupyter notebook and Octave kernel installation
    [C7] Andrew Ng
    [C6] Andrew Ng
  • 原文地址:https://www.cnblogs.com/jxba/p/8993518.html
Copyright © 2020-2023  润新知