• Selenium学习之==>Switch与SelectApi接口详解


    Switch

      我们在UI自动化测试时,总会出现新建一个tab页面、弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了。需要用到Selenium单独提供的模块switch_to模块

    SwitchToWindows

    1 handles = driver.window_handles
    2  
    3 # SwitchToWindows接受浏览器TAB的句柄
    4 driver.switch_to.window(handles[1])

    例子:

     1 # 浏览器句柄及指针切换
     2 print(driver.window_handles)    # 获取所有打开server的浏览器句柄,返回的是一个list
     3 bl = driver.find_element_by_css_selector('[href="/new-index/"]')
     4 bl.click()                      # 点击连接打开一个新的页面
     5 print(driver.window_handles)    # 再次获取所有打开server的浏览器句柄
     6 handes = driver.window_handles
     7 driver.switch_to.window(handes[1])  # 切换浏览器句柄到新打开的这个页面
     8 cl = driver.find_element_by_css_selector('#newtag')
     9 cl.send_keys('AAAA')
    10 driver.close()     # 关闭当前指针指向句柄的页面
    11 driver.switch_to.window(handes[0])  # 手动将浏览器指针切换回之前的页面
    12 driver.find_element_by_css_selector('#i1').send_keys('EEEE')
    13 driver.quit()      # 关闭所有页面

    SwitchToFrame

     1 # SwitchToFrame支持id、name、frame的element
     2  
     3 # 接受定位到的iframe的Element,这样就可以通过任意一种定位方式进行定位了
     4 frameElement = driver.find_element_by_name('top-frame')
     5 driver.switch_to.frame(frameElement)
     6  
     7 # 通过fame的name、id属性定位
     8 driver.switch_to.frame('top-frame')
     9  
    10 # 当存在多层iframe嵌套时,需要一层一层的切换查找,否则将无法找到
    11 driver.switch_to.frame('top-frame')
    12 driver.switch_to.frame('baidu-frame')
    13  
    14 # 跳转到最外层的页面
    15 driver.switch_to.default_content()
    16  
    17 # 多层Iframe时,跳转到上一层的iframe中
    18 driver.switch_to.parent_frame()

    例子:

     1 # 多层iframe切换,需要一层一层进入,但是能从任意一层切换到最外层
     2 # 切换到top-frame
     3 driver.switch_to.frame('top-frame')
     4 import time
     5 time.sleep(1)
     6 # 输入newtag文案
     7 driver.find_element_by_css_selector('#newtag').send_keys('XXXX')
     8 # 切换到baidu-frame
     9 driver.switch_to.frame('baidu-frame')
    10 time.sleep(1)
    11 # 输入kw文案
    12 driver.find_element_by_css_selector('#kw').send_keys('YYYY')
    13 # 返回上一层frame,即top-frame
    14 driver.switch_to.parent_frame()
    15 # 清空top-frame的输入
    16 driver.find_element_by_css_selector('#newtag').clear()
    17 # 再切换到baidu-frame
    18 driver.switch_to.frame('baidu-frame')
    19 # 再清空baidu-frame的输入
    20 driver.find_element_by_css_selector('#kw').clear()
    21 # 切换到最外层frame
    22 driver.switch_to.default_content()
    23 # 输入i1文案
    24 driver.find_element_by_css_selector('#i1').send_keys('NNNN')

    SwitchToAlert

     1 # alert 实际上也是Selenium的一个模块
     2 from selenium.webdriver.common.alert import Alert
     3  
     4 # 也可以通过Webdriver的switch_to来调用
     5  
     6 # 点击确认按钮
     7 driver.switch_to.alert.accept()
     8  
     9 # 如果是确认弹框,相当于点击需要和X按钮
    10 driver.switch_to.alert.dismiss()
    11  
    12  
    13 # 如果alert上有文本框时,可以输入文字。(注: 没遇到过)
    14 driver.switch_to.alert.send_keys()
    15  
    16 # 返回Alert上面的文本内容
    17 text = driver.switch_to.alert.text

    例子:

    1 # 弹框处理
    2 driver.find_element_by_css_selector('#confirm').click()  # 点击按钮,弹出弹框
    3 print(driver.switch_to.alert.text)  # 打印弹框返回的文本文字
    4 driver.switch_to.alert.accept()     # 确认
    5 driver.switch_to.alert.dismiss()    # 取消

    Select

      在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块)。

     1 # 通过select选项的索引来定位选择对应选项(从0开始计数)
     2 Select(s).select_by_index(5)
     3  
     4 # 通过选项的value属性值来定位
     5 Select(s).select_by_value('2')
     6  
     7 # 通过选项的文本内容来定位
     8 Select(s).select_by_visible_text('牡丹江')
     9  
    10 # 返回第一个选中的optionElement对象
    11 Select(s).first_selected_option
    12  
    13 # 返回所有选中的optionElement对象
    14 Select(s).all_selected_options
    15  
    16 # 取消所有选中的option
    17 Select(s).deselect_all()
    18  
    19 # 通过option的index来取消对应的option
    20 Select(s).deselect_by_index(1)
    21  
    22 # 通过value属性,来取消对应option
    23 Select(s).deselect_by_value('')
    24  
    25 # 通过option的文本内容,取消对应的option
    26 Select(s).deselect_by_visible_text('')

    例子:

    1 # 点击下拉菜单再点击一个值
    2 from selenium.webdriver.support.select import Select
    3 driver.get('http://ui.imdsx.cn/html/')
    4 driver.execute_script('window.scrollTo(0,1500);')
    5 select = driver.find_element_by_xpath('//select[1]')
    6 # 实例化select,接收一个select标签,如果不是select标签则抛异常
    7 Select(select).select_by_value('2')  # 通过select标签的option中的value的值定位
    8 Select(select).select_by_index('2')  # 通过select标签的option中的下标定位,从0开始

    如果一个标签下还有子集,可以继续在这个标签小查找,如下:

    1 driver.get('http://ui.imdsx.cn/html/')
    2 driver.execute_script('window.scrollTo(0,1500);')
    3 select = driver.find_element_by_xpath('//select[1]')
    4 # 获取select标签下所有的option的元素
    5 options = select.find_elements_by_tag_name('option')
    6 for opt in options:
    7     print(opt.get_attribute('value'))  # 循环获取select('//select[1]')标签下的option的value属性
    8     print(opt.get_attribute('index'))  # 循环获取select('//select[1]')标签下的option的下标
  • 相关阅读:
    《黑白团团》第九次团队作业:Beta冲刺与验收准备
    《黑白团团队》第九次团队作业:Beta冲刺第一天
    《黑白团团队》第八次团队作业:Alpha冲刺 第五天
    《黑白团团队》第八次团队作业:Alpha冲刺 第四天
    《黑白团团队》第八次团队作业:Alpha冲刺 第三天
    《黑白团团队》第八次团队作业:Alpha冲刺
    《黑白团团队》第八次团队作业:Alpha冲刺 第二天
    《黑白团团队》第七次作业:团队项目设计完善&编码
    《少年先疯队》第九次团队作业:Beta冲刺与团队项目验收
    《少年先疯队》第九次团队作业:Beta冲刺第三天
  • 原文地址:https://www.cnblogs.com/L-Test/p/9307553.html
Copyright © 2020-2023  润新知