python 中表单frame切换和窗口切换

在自学python的过程中遇到很多问题,有时候明明觉得没问题但是就是报错,检查了感觉定位的路劲也没问题啊,怎么会呢,后来查询了很多才知道 有frame和窗口切换导致我定位的路径没问题就是打不开我定位的页面,在CSDN很多博主哪里知识都开始收费 看不到里面的详细介绍,在知乎上看到一篇文章非常的不错 很详细。

当我们遇到frame嵌套页面时,WebDriver只能在一个页面上进行元素识别,没法对frame间或frame内的元素进行定位,需要通过switch_to.frame()切换frame再进行定位。而对于不同的窗口间切换,Selenium2.0中提供了switch_to.window()方法,可以切换到任意的窗口

2.1 多frame表单切换

多frame表单切换示意图:

 在web页面中有4个元素,元素1、元素2、frame1下的元素3、frame2下的元素4,如果定位元素3,就需要先切换到frame 1,再定位元素3 。如果想定位元素4,就要先切回web页面,再跳转到frame 2 ,最后才能定位到元素4 。

部分html代码如下:

<html>
    <body>
        ......
        <div class="row-fluid">
            <div class="s1">
                <h3>frame1</h3>
                    <iframe id="search_1" name="af" src="http://www.xx.com" width="800" height="300">
                        <input name='value' id='s_value'>
                    </iframe>
            </div>
        </div>
         <div class="row-fluid">
            <div class="s2">
                <h3>frame2</h3>
                    <iframe id="search_2" name="bf" src="http://www.xx2.com" width="800" height="300">
                        <input name='value2' id='s_name'>
                    </iframe>
            </div>
        </div>
        
        ......
    </body>
</html>

根据元素定位以及frame定位方法,代码如下:

# -*- coding:utf-8 -*-
from selenium import webdriver
from  time import  sleep

#打开火狐浏览器
driver=webdriver.Firefox()

# 打开url地址
driver.get("https://www.xx.com")
# 要定位元素id为s_value,就要先跳转到iframe1
driver.switch_to.frame("search_1")
#再定位到id:s_value
driver.find_element_by_id("s_value")

# 切回主页面
driver.switch_to.default_content()  
# 要定位元素id为s_name,就要先跳转到iframe2
driver.switch_to.frame("search_2")
#再定位到id:s_name
driver.find_element_by_id("s_name")

# 切回上级iframe
driver.switch_to_parent_frame()  

#关闭浏览器
driver.quit()

2.2 多窗口切换 

 多窗口示意图,如下图所示:

对于多窗口切换,我们要先获取到当前窗口和所有窗口,再逐一判断是否是我们所需要的窗口:

 

# -*- coding:utf-8 -*-
from selenium import webdriver

#打开火狐浏览器
driver=webdriver.Firefox()

# 打开url地址
driver.get("https://www.xx.com")
#获得当前窗口
curr_handle=driver.current_window_handle
#打开新窗口
driver.find_element_by_id("new_window").click()
#获取所有的窗口
all_handles=driver.window_handles
#循环判断窗口是否为当前窗口
for handle in all_handles:
    if handle != curr_handle:
        driver.switch_to.window(handle)
        print("跳转到非当前窗口!")
#跳转到原先的窗口
driver.switch_to.window(curr_handle)

#关闭浏览器
driver.quit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值