• Selenium-Switch与SelectApi介绍


    Switch

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

    引用路径:

    # 第一种方式可以通过直接导入SwitchTo模块来进行操作
    from selenium.webdriver.remote.remote.switch_to import SwitchTo
    
    # 第二种方式是直接通过Webdriver的switch_to来操作
    driver.switch_to

    webdriver在以前的版本中已经为我们封装好了切换Windows,alert,iframe,现在依然可以使用,但是会被打上横线,代表他已经过时了,建议使用SwitchTo类来进行操作。

    SwitchToWindows

    handles=driver.window_handles
    # SwitchToWindows接受浏览器TAB的句柄
    driver.sitch_to.windows(handles[1])
    #获取当前的tab名称
    # handle=driver.current_window_handle
    # print(handle)
    #获取所有tab名称
    driver.find_element_by_css_selector('[href="/new-index/"]').click()
    handles=driver.window_handles
    print(handles)
    #切换tab页面
    driver.switch_to.window(handles[1])
    #验证是否正确切换到第二个页面上
    driver.find_element_by_css_selector('#newtag').send_keys(1111)

    SwitchToFrame

    #SwichToFrame支持id,name,frame的element
    # 接受定位到的iframe的Element,这样就可以通过任意一种定位方式进行定位了
    frameElement = driver.find_element_by_name('top-frame')
    driver.switch_to.frame(frameElement)
     
    # 通过fame的name、id属性定位
    driver.switch_to.frame('top-frame')
     
    # 当存在多层iframe嵌套时,需要一层一层的切换查找,否则将无法找到
    driver.switch_to.frame('top-frame')
    driver.switch_to.frame('baidu-frame')
     
    # 跳转到最外层的页面
    driver.switch_to.default_content()
     
    # 多层Iframe时,跳转到上一层的iframe中
    driver.switch_to.parent_frame()
    from selenium import webdriver
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    driver.maximize_window()#将窗口放大
    driver.execute_script('window.scrollTo(0,0);')
    #切换iframe
    # driver.switch_to.frame('top-frame')
    iframe=driver.find_element_by_css_selector('iframe[src="/new-index/"]')
    driver.switch_to.frame(iframe)
    driver.find_element_by_css_selector('#newtag').send_keys(1111)
    #iframe 一定要一层一层找,层级一旦错误就定位失败
    driver.switch_to.frame('baidu-frame')
    driver.find_element_by_css_selector('#kw').send_keys(1111)
    #返回到上一级iframe
    driver.switch_to.parent_frame()
    driver.find_element_by_css_selector('#newtag').clear()
    #一次返回到最外层的iframe
    driver.switch_to.default_content()
    driver.find_element_by_css_selector('#i1').send_keys(2222)

    SwitchToAlert

    # alert 实际上也是Selenium的一个模块
    from selenium.webdriver.common.alert import Alert
     
    # 也可以通过Webdriver的switch_to来调用
     
    # 点击确认按钮
    driver.switch_to.alert.accept()
     
    # 如果是确认弹框,相当于点击需要和X按钮
    driver.switch_to.alert.dismiss()
     
     
    # 如果alert上有文本框时,可以输入文字。(注: 没遇到过)
    driver.switch_to.alert.send_keys()
     
    # 返回Alert上面的文本内容
    text = driver.switch_to.alert.text
    from selenium import webdriver
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    driver.maximize_window()#将窗口放大
    driver.execute_script('window.scrollTo(0,0);')
    e=driver.find_element_by_css_selector('#alert')
    e.click()
    import time
    time.sleep(2)
    print(driver.switch_to.alert.text)#获取alert弹窗中的文本内容
    driver.switch_to.alert.accept()#点击alert的确定按钮
    from selenium import webdriver
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    driver.maximize_window()#将窗口放大
    driver.execute_script('window.scrollTo(0,0);')
    el=driver.find_element_by_css_selector('#confirm')
    el.click()
    import time
    time.sleep(2)
    print(driver.switch_to.alert.text)
    # driver.switch_to.alert.accept()#点击确定
    driver.switch_to.alert.dismiss()#点击取消

    Select

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

    引用路径:

    from selenium.webdriver.support.select import Select

    Select操作

    # 通过select选项的索引来定位选择对应选项(从0开始计数)
    Select(s).select_by_index(5)
     
    # 通过选项的value属性值来定位
    Select(s).select_by_value('2')
     
    # 通过选项的文本内容来定位
    Select(s).select_by_visible_text('牡丹江')
     
    # 返回第一个选中的optionElement对象
    Select(s).first_selected_option
     
    # 返回所有选中的optionElement对象
    Select(s).all_selected_options
     
    # 取消所有选中的option
    Select(s).deselect_all()
     
    # 通过option的index来取消对应的option
    Select(s).deselect_by_index(1)
     
    # 通过value属性,来取消对应option
    Select(s).deselect_by_value('')
     
    # 通过option的文本内容,取消对应的option
    Select(s).deselect_by_visible_text('')
    from selenium import webdriver
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/html/")
    driver.maximize_window()#将窗口放大
    driver.execute_script('window.scrollTo(0,0);')
    from selenium.webdriver.support.select import Select
    #应用select模块必须为select标签编写的下拉框
    #如果select元素不在页面中展示时(需要加载时),需要滑动到该元素位置时,才能操作:使用driver.execute_script('window.scrollTo(0,1800);'),高度自己调节
    s=driver.find_element_by_xpath('//select[1]')
    # Select(s).select_by_index(3)#四川
    Select(s).select_by_value('3')#北京
    #当你的元素中还含有元素的话,就可以在find element来缩小范围
    from selenium import webdriver
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    driver.maximize_window()#将窗口放大
    driver.execute_script('window.scrollTo(0,0);')
    from selenium.webdriver.support.select import Select
    print(driver.find_element_by_css_selector('#on').is_selected())
    print(driver.find_element_by_css_selector('#off').is_selected())#是否被选中()
  • 相关阅读:
    UVA10340
    声明顺序 (Bootstrap 编码规范)
    使用SVN小结
    通过LINQ TO SQL类显示数据库表的数据
    大学初进团队感想
    51NOD:1639-绑鞋带
    Codeforces Round #464 (Div. 2) E. Maximize!
    Codeforces Round #464 (Div. 2) D. Love Rescue
    Codeforces Round #464 (Div. 2) C. Convenient For Everybody
    Codeforces Round #464 (Div. 2) B. Hamster Farm
  • 原文地址:https://www.cnblogs.com/wxcx/p/8947596.html
Copyright © 2020-2023  润新知