• 【Selenium03篇】python+selenium实现Web自动化:元素三类等待,多窗口切换,警告框处理,下拉框选择


    一、前言

    最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新!

    这是python+selenium实现Web自动化第三篇博文

    二、Selenium第一篇和第二篇博文地址:

    【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!

    【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!

    三、Selenium之-元素等待

    参考博文:自动化测试中的三类等待深入剥析

    四、Selenium之-多窗口切换

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

    current_window_handle:获得当前窗口句柄
    window_handles:返回所有窗口的句柄到当前会话
    switc_to.window():用于切换到相应的窗口

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    """
    @Time    :   2020/4/15
    @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
    @Contact :   软件测试技术群:695458161
    @License :   (C)Copyright 2017-2019, Micro-Circle
    @Desc    :   None
    """
    
    from selenium import webdriver
    import time
    
    base_url = 'https://www.baidu.com/'
    
    
    browser = webdriver.Chrome('../tools/chromedriver.exe')
    # 隐式等待10秒
    browser.implicitly_wait(10)
    browser.get(base_url)
    
    
    # 获得搜索窗口的句柄
    search_windows = browser.current_window_handle
    browser.find_element_by_link_text('登录').click()
    browser.find_element_by_link_text('立即注册').click()
    
    # 活得当前打开窗口的句柄
    all_handles = browser.window_handles
    
    # 进入注册窗口
    for handle in all_handles:
        if handle != search_windows:
            browser.switch_to.window(handle)
            print('now register window!')
            browser.find_element_by_name('account').send_keys('username')
            browser.find_element_by_name('password').send_keys('password')
            time.sleep(2)
    
    browser.quit()

    五、Selenium之-警告框处理

    在 webdriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用 text/accept/dismiss/ send_keys 等方法进行操作。

    text:返回 alert/confirm/prompt 中的文字信息。
    accept():接受现有警告框。
    dismiss():解散现有警告框。
    send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    """
    @Time    :   2020/4/15
    @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
    @Contact :   软件测试技术群:695458161
    @License :   (C)Copyright 2017-2019, Micro-Circle
    @Desc    :   None
    """
    
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    
    base_url = 'https://www.baidu.com/'
    driver = webdriver.Chrome('../tools/chromedriver.exe')
    driver.implicitly_wait(10)
    driver.get(base_url)
    
    # 鼠标悬停至 “设置” 链接
    link = driver.find_element_by_link_text('设置')
    ActionChains(driver).move_to_element(link).perform()
    
    # 打开搜索设置
    driver.find_element_by_link_text('搜索设置').click()
    time.sleep(3)
    
    # 点击 “搜索设置”
    driver.find_element_by_class_name('prefpanelgo').click()
    time.sleep(3)
    
    # 接受警告框prefpanelgo
    driver.switch_to.alert.accept()
    time.sleep(3)
    
    driver.quit()

    六、Selenium之-下拉框处理

     webdriver 提供了 Select 类来处理下拉框。

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    """
    @Time    :   2020/4/15
    @Author  :   公众号:软测之家  更多技术干货,软测视频,面试资料请关注!
    @Contact :   软件测试技术群:695458161
    @License :   (C)Copyright 2017-2019, Micro-Circle
    @Desc    :   None
    """
    
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from time import sleep
    
    base_url = 'https://www.baidu.com/'
    driver = webdriver.Chrome('../tools/chromedriver.exe')
    driver.implicitly_wait(10)
    driver.get(base_url)
    
    # 鼠标悬停至“设置”链接
    driver.find_element_by_name('设置').click()
    sleep(2)
    # 打开 “搜索设置”
    driver.find_element_by_name('搜索设置').click()
    sleep(2)
    # 搜索结果显示条数
    # Select类用于定位select标签。
    sel = driver.find_element_by_xpath("//select[@id='nr']")
    # select_by_value() 方法用于定位下接选项中的value值。
    Select(sel).select_by_value('50')
    
    driver.quit()
     

    七、持续更新中请关注

    如果你觉得此文对你有帮助,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:

    软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    作者:来自公众号:软测之家
    出处:https://www.cnblogs.com/csmashang/p/12706767.html
    原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

  • 相关阅读:
    【codevs1002】搭桥(prim)
    【codevs1993】草地排水(最大流)
    NOIP总结
    【codevs1069】关押罪犯[noip2010](并查集)
    第一章 数据库的设计
    Socket与ServerSocket
    关于 httpUrlConnection 的 setDoOutput 与 setDoInput的区别
    java基础复习1
    eclipes快捷键
    List Set Map 的区别 用法以及特点(转载)
  • 原文地址:https://www.cnblogs.com/csmashang/p/12706767.html
Copyright © 2020-2023  润新知