多表单切换和多窗口切换

多表单切换


如果定位不到元素,先查看是不是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()
posted @ 2021-01-06 14:03  绵绵01  阅读(150)  评论(0编辑  收藏  举报
levels of contents