zoukankan      html  css  js  c++  java
  • 多表单切换和多窗口切换

    多表单切换


    如果定位不到元素,先查看是不是iframe表单,如果是先切换到iframe表单

    import time
    from selenium import webdriver
    #要想调用键盘按键操作需要引入keys包
    from selenium.webdriver.common.keys import Keys
    # from selenium.webdriver.commom.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    def swich_frame():
        browser = webdriver.Firefox()
        #切换到表单 iframe(id='if')
        browser.switch_to.frame('if')
        #接下来就操作正常的元素了
        browser.find_element_by_css_selector("#kw").send_keys(u'易烊千玺')
        browser.find_element_by_id("su").click()

    switch_to.frame()默认可以直接取表单的id或者 name属性。如果ifram 没有可用的id 和name 属性,则可以通过下面的方法定位

    def swich_frame():
        browser = webdriver.Firefox()
        #先通过xpath 定位到iframe
        xf=browser.find_element_by_xpath('//*[@class="if"]')
        #再将定位对象传给switch_to.frame()方法
        browser.switch_to.frame(xf)
        
        browser.switch_to.parent_frame()
    switch_to.parent_frame()跳出当前一级表单,该方法默认对应于离它最近的switch_to.frame()方法,除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面

     多窗口切换


     有些web页面打开后,会重新打开一个新的窗口,如果想要在新的窗口上操作,就得先切换窗口。获取窗口的唯一标识用句柄表示,所以只要切换句柄,就可以在多个页面上操作

    driver.current_window_handle :获取当前窗口句柄

    driver.window_handles :返回所有窗口的句柄

    driver.switch_to.window() :用于切换到相应的窗口

    def switch_window():
        browser = webdriver.Firefox()
        browser.implicitly_wait(5)
        browser.get("http://www.baidu.com")
        #获得百度搜索窗口句柄
        search_window=browser.current_window_handle
    
        browser.find_element_by_link_text(u"登录").click()
        browser.find_element_by_link_text(u'立即注册').click()
    
        #获得当前所有打开窗口的句柄
        all_handles=browser.window_handles
    
        #进入注册窗口
        for handle in all_handles:
            if handle!=search_window:
                browser.switch_to.window(handle)
                browser.implicitly_wait(10)
                browser.find_element_by_name("phone").send_keys('username')
                browser.find_element_by_css_selector('#TANGRAM__PSP_4__password').send_keys('1234456tang')
                time.sleep(3)
    
        #回到搜索窗口
        for  handle in all_handles:
            if handle==search_window:
                browser.switch_to.window(handle)
                browser.implicitly_wait(10)
                browser.find_element_by_id('kw').send_keys('test')
                browser.find_element_by_id('su').click()
                time.sleep(2)
        browser.quit()
  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/yan-2010/p/14239951.html
Copyright © 2011-2022 走看看