Selenium常用API

  1. 鼠标事件

    ActionChains 类鼠标操作的常用方法:

            context_click() 右击

            double_click()  双击

            drag_and_drop() 拖动

            move_to_element() 鼠标悬停在一个元素上

            click_and_hold() 按下鼠标左键在一个元素上

    具体操作:

            注意: 我们要使用的是ActionChains类下面的方法之前,要先将包引入
    from selenium.webdriver.common.action_chains import ActionChains

    ActionChains()

    ActionChains(driver)

    driver: webdriver 实例执行用户操作

    ActionChains 用于生成用户的行为;所有的行为都存储在actionchains 对象。通过perform()执行存储的行为。
    语法:ActionChains(driver).鼠标事件方法.perform()

    context_click()        右击

    #选择需要鼠标右击的目标元素  
    right = driver.find_element_by_css_selector('a[title="自动化相关"]')  
    #执行鼠标右击操作  
    ActionChains(driver).context_click(right).perform()
    

    double_click()        双击

    # 定位到要双击的元素  
    double_click = driver.find_element_by_id("kw")  
    # 双击操作  
    ActionChains(driver).double_click(double_click).perform()
    

    drag_and_drop(source,target)        拖动
    source:鼠标拖动的源元素;
    target:鼠标释放的目标元素;  
    语法:
    drag_and_drop(起始元素,目标元素)  # 将起始元素,拖动到目标元素drag_and_drop_by_offset(起始元素,x坐标,y坐标) #将起始元素,拖动到指定的坐标位置

    move_to_element()        悬停(将鼠标移动到某个元素上)

    # 定位到要悬停的元素  
    above = driver.find_element_by_link_text("设置")  
    # 悬停操作  
    ActionChains(driver).move_to_element(above).perform()
    

    click_and_hold()        按下鼠标在一个元素上

    #定位到鼠标按下左键的元素  
    left=driver.find_element_by_xpath("xxx")  
    #对定位到的元素执行鼠标左键按下的操作  
    ActionChains(driver).click_and_hold(left).perform()
    

  2. 键盘事件 

 我们在实际的测试工作中,有时候我们在测试时需要使用tab 键将焦点转移到下一个元素,用于验证元素的排序是否正确。webdriver 的Keys()类提供键盘上所有按键的操作,甚至可以模拟一些组合建的操作,如Ctrl+A ,Ctrl+C/Ctrl+V 等。在某些更复杂的情况下,还会出现使用send_keys 来模拟上下键来操作下拉列表的情况。

                使用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

         脚本代码:

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
import time  
""" 
键盘事件 
6.	"""  
driver = webdriver.Firefox()  
driver.get("https://www.baidu.com")  
driver.find_element_by_id("kw").send_keys("Selenium")  
time.sleep(2)  
# Ctrl+A 全选操作  
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')  
time.sleep(2)  
# Ctrl+C 复制操作  
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')  
time.sleep(2)  
driver.get("http://cn.bing.com")  
time.sleep(2)  
# Ctrl+V 粘贴操作  
driver.find_element_by_id("sb_form_q").send_keys(Keys.CONTROL,'v')  
time.sleep(2)  
# 回车键操作  
driver.find_element_by_id("sb_form_q").send_keys(Keys.ENTER)  
time.sleep(2)  
driver.quit() 

3.下拉菜单选择

如图所示:带有<select></select>标签的下拉菜单选择页面源码:

 

如果使用普通方法来定位的话,先定位下拉菜单,再定位菜单中的具体元素,对下拉菜单进行二次定位。

#先定位下拉框  
selector = driver.find_element_by_id('select_demo')  
#操作下拉框选项--选择香蕉  
element = selector.find_element_by_xpath('//option[@value="banana"]').click() 

 使用select类来处理下拉菜单(推荐方法):

      Select(select标签元素).select_by_index()  通过选项索引值定位  索引从0开始

            Select(select标签元素).select_by_value()  通过选项value属性值定位

            Select(select标签元素).select_by_visible_text()  通过选项的text值定位

from selenium import webdriver  
  
import os,time  
	  
from selenium.webdriver.support.ui import Select  
	  
driver = webdriver.Firefox()  
file_path = 'file:///' + os.path.abspath('Test_select.html')  
driver.get(file_path)  
time.sleep(2)  
select = Select(driver.find_element_by_id('select_demo'))  
time.sleep(2)  
#通过value来选择  
select.select_by_value('banana')  
time.sleep(2)  
#通过index来选择  
select.select_by_index(4)  
time.sleep(2)  
#通过文本直接选择  
select.select_by_visible_text('葡萄')  
time.sleep(5)  
driver.quit()

4.滚动条操作

WebDriver类库中并没有直接提供对滚动条进行操作方法,但是它提供了可调用JavaScript脚本的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的;

        设置JavaScritp脚本控制滚动条:js="window.scrollTo(0,1000)"

                       (0:水平距离;1000:垂直距离;单位像素)

        WebDriver调用js脚本方法:driver.execute_script(js)

聚焦到某个元素同样是调用JavaScript脚本的方法:

        target = driver.find_element_by_xxxx()

        driver.execute_script("arguments[0].scrollIntoView();", target)

5.iframe操作

在Web应用中经常会遇到表单嵌套页面,Frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位;而frame和iframe需要切换进去才能定位到其中的元素。这时就需要通过switch_to.frame()方法将当前定位的主体切换为 frame/iframe表单的内嵌页面中。

具体方法:

        1、switch_to.frame() 默认可以直接取表单的id或name属性进行切换,也可以用Xpath等。

        2、switch_to.parent_frame() 跳出当前层

        3、switch_to.default_content() 返回最外层

from selenium import webdriver  
import time  
import os  
""" 
多表单切换 
"""  
driver = webdriver.Firefox()  
  
file_path = 'file:///' + os.path.abspath('frame.html')  
	  
driver.get(file_path)  
	  
driver.implicitly_wait(5)  
#先找到到iframe1(id = f1)  
driver.switch_to_frame('f1')  
#再找到iframe2(id = f2)  
driver.switch_to_frame('f2')  
	  
#操作表单内元素  
ele = driver.find_element_by_id('kw')  
ele.clear()  
ele.send_keys('源码教育')  
driver.find_element_by_id('su').click()  
#跳出当前层  
driver.switch_to.parent_frame()  
time.sleep(5)  
driver.quit() 

 

注意:

         - 1.进入iframe,一层一层进入,不能跳跃

        - 2.退出iframe,具体使用哪种退出方式,需要看后续操作步骤根据下一个所操作的元素所在位置决定

        - 3.退出iframe,可以一次性退出

        - 4.iframe在页面中的应用场景:

                            1.登录

                            2.后台管理系统菜单栏

                            3.富文本编辑器

 6.多窗口切换

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。switch_to.window()方法可以实现在不同的窗口之间切换。

语法:

        current_window_handle 获得当前窗口句柄

        window_handles 获取所有窗口句柄

        switch_to.window() 切换窗口

from selenium import webdriver  
  
import time  
""" 
多窗口切换 
"""   
	  
driver = webdriver.Firefox()  
driver.get('http://www.baidu.com')  
	  
#获得当前窗口  
sreach_windows = driver.current_window_handle  
driver.find_element_by_link_text('登录').click()  
driver.implicitly_wait(5)  
driver.find_element_by_link_text('立即注册').click()  
	  
# 获取所有窗口句柄  
all_handles = driver.window_handles  
# 进入注册窗口页面  
for handle in all_handles:  
    if handle != sreach_windows:  
        # 切换窗口  
        driver.switch_to.window(handle)  
driver.find_element_by_name("userName").send_keys("userName")  
time.sleep(2)  
	  
# 进入搜索窗口页面  
for handle in all_handles:  
    if handle == sreach_windows:  
# 切换窗口  
        river.switch_to.window(handle)  
driver.back()  
time.sleep(5)  
driver.find_element_by_id("kw").send_keys("Selenium")  
driver.find_element_by_id("su").click()  
time.sleep(2)  
driver.quit()

7.弹窗处理

webdriver 中处理JavaScript 所生成的alert、confirm 以及prompt 是很简单的。具体思路是使用switch_to.alert方法定位到alert/confirm/prompt。然后使用text/accept/dismiss/send_keys 按需进行操做。

          - 1.获取弹窗文本内容  alert.text

          - 2.在弹窗中输入文字  alert.send_keys()

          - 3.点击弹窗确定按钮  alert.accept()

          -4.点击弹窗取消按钮  alert.dismiss()

自定义弹窗处理

        由于alert弹窗不美观,现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法就驾驭不了了,此时就要搬出JS方法。

        处理这种弹窗可以利用HTML DOM Style 对象,有一个display属性,可以设置元素如何被显示。

        js1 = 'document.getElementById("div_company_mini").style.display="none";'

        driver.execute_script(js1)

        js2 = 'document.getElementById("side-bar").style.display="none";'

        driver.execute_script(js2)

8.单选框和复选框

        单选框:在HTML代码里,type="radio",一组单元的name都相同
        判断元素是否被选中:元素.is_selectde()

        多选框:在HTML代码里,type="checkbox",name属性相同
        具体实现的代码如下:

from selenium import webdriver
import time
eles = driver.find_elements_by_name('checkbox')
# 遍历元素,判断是否已经选择,未选择,则全选
# for i in eles:
#     if not i.is_selected():
#         i.click()
time.sleep(3)

options = ('购物','音乐')  # 选择指定的复选框
for i in eles:  # 遍历复选框
    if i.get_attribute('value') in options:  # 判断复选框的值是否在选项里
        if not i.is_selected():
            i.click()

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值