zoukankan      html  css  js  c++  java
  • python-web自动化-元素操作:windows窗口切换 / alert切换 / iframe切换

    1. windows窗口切换:切换到要操作的窗口

    有多个窗口:
    1. 触发新窗口的出现
    2. 得知道新窗口是谁 -- 依据窗口的window_handle来识别窗口
    3. 得到窗口的window_handle -- driver.window_handles(当前打开的所有窗口的句柄)
             A. 得到的是一个有序列表
             B. 新窗口: -1
    4. 切换:driver.switch_to.window(要切换的窗口的句柄)

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    import time
    
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    
    driver.find_element_by_xpath('//*[@id="kw"]').send_keys('许嵩')
    driver.find_element_by_xpath('//input[@id="su"]').click()
    #显示所有窗口
    wins = driver.window_handles
    time.sleep(3)
    #打开新的窗口
    driver.find_element_by_xpath('//*[@id="1"]/h3/a ').click()
    #判断新窗口是否已经打开
    WebDriverWait(driver,5,1).until(EC.new_window_is_opened(wins))
    #切换窗口
    # 1.获取所有窗口
    wins1 = driver.window_handles
    # 2.切换到新窗口
    driver.switch_to.window(wins1[-1])
    

    2. alert弹出框操作

    (1)使用switch_to方法先切换到浏览器弹出框
             driver.switch_to.alert
    (2)Alert类提供了一系列的操作方法
            dismiss(): 否
            accept(): 是
            text(): 获取弹出框里的文本内容
            send_keys(): 在弹出框里输入文本

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    # 在当前窗口/框架 同步执行javaScript
    driver.execute_script("alert('这是一个alert弹框')")
    #判断弹窗存在
    alert = WebDriverWait(driver,10,1).until(EC.alert_is_present())
    # driver.switch_to_alert().accept() #相当于点击“确定”
    driver.switch_to_alert().dismiss() #相当于点击“取消”
    # text=driver.switch_to_alert().text #获取弹窗框里面的文字
    # print(text)
    # driver.close()
    

      

    3. iframe切换


    步骤:

    1.先确认你要操作的元素,是否存在与iframe中,如果元素在iframe中就需要切换

    2.找到该iframe

    3.切换到该iframe (两种方式)

       第一种方式:有三种方法,只是单纯的切换
       driver.switch_to.frame(1) #通过index(下标)
       driver.switch_to.frame('login_frame_qq') #通过name
       driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]')) #通过webelement

       第两种方式:既等待元素可见又进行了iframe切换

       WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it('login_frame_qq'))

    4.切换完后,就以这个iframe中的html为主html

    5.返回默认的html页面,无论现在在那一层的iframe,执行一次即可。
       driver.switch_to.default_content()

    完整代码如下:

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    
    # 登录腾讯课堂页面
    driver.get('https://ke.qq.com/course/list')
    
    # 点击首页登录
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//a[@id="js_login"]')))
    driver.find_element_by_id("js_login").click()
    
    # 登录弹窗点击QQ登录
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//a[contains(@class,"btns-enter-qq")]')))
    driver.find_element_by_xpath('//a[contains(@class,"btns-enter-qq")]').click()
    
    # iframe切换
    # driver.switch_to.frame('login_frame_qq') #通过name
    driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]')) #通过webelement
    
    # 弹窗点击账户密码登录
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//a[@id="switcher_plogin"]')))
    driver.find_element_by_xpath('//a[@id="switcher_plogin"]').click()
  • 相关阅读:
    linux命令df中df -h和df -i的区别
    linux系统df和du命令的区别
    Linux type命令的用法
    《DNS的正向反向解析》RHEL6
    《DNS服务缓存的建立》RHEL6
    《服务器的追踪与审计》RHEL6
    《LDAP服务器和客户端的加密认证》RHEL6——第二篇 运维工程师必考
    《ISCSI集中存储》RHEL6——CE
    《LDAP服务器的配置与客户端的测试》RHEL6——第一篇 运维工程师必考
    《RHEL6硬盘的分区和swap分区管理》——硬盘分区的大总结
  • 原文地址:https://www.cnblogs.com/Aphrodite/p/10310046.html
Copyright © 2011-2022 走看看