自动化5-frame切换和窗口切换

一、iframe元素

  1、iframe元素:iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。

    ——》使用 find_element_by_class_name等时会出现不识别的问题,操作范围是当前的html,不包含内嵌的html文档里面的内容。

    ——》若要操作其中的元素,必须 切换操作范围 到 被嵌入的文档中。(iframe内部

      切换方式:使用webDriver对象的switch_to属性

            wd.switch_to.frame(frame_reference)

            frame_reference可以是frame元素的属性name或ID或者frame对应的WebElement对象。

            可以依据frame的元素位置或属性特性,使用find系列的方法,选择该元素,得到对应的WebElement对象。

        Iframe外部:使用 default_content()

 1 from selenium import webdriver
 2 wd = webdriver.Firefox(executable_path=r'D:\BrowserDriver\geckodriver.exe')
 3 wd.get('http://cdn1.python3.vip/files/selenium/sample2.html')
 4 # 选择内部元素
 5 wd.switch_to.frame('innerFrame')
 6 # 选择外部元素
 7 wd.switch_to.default_content()
 8 elements = wd.find_elements_by_class_name('animal')
 9 for element in elements:
10     print(element.text)
11 wd.find_element_by_id('outerbutton').click()
12 wd.quit()

  2、切换新的窗口

 1 # 切换新窗口: 使用webdriver对象的switch_to属性里面的window方法。格式:wd.switch_to.window(handle),
 2 # webdriver对象有window_handles属性,这是个列表对象,里面包括了当前浏览器里面所有的窗口句柄
 3 # 句柄:网页窗口的id。
 4 '''
 5 from selenium import webdriver
 6 wd = webdriver.Firefox(executable_path=r'D:\BrowserDriver\geckodriver.exe')
 7 wd.get('http://cdn1.python3.vip/files/selenium/sample3.html')
 8 link = wd.find_element_by_tag_name('a')
 9 link.click()
10 for handle in wd.window_handles:
11     wd.switch_to.window(handle)
12     if 'Bing' in wd.title:
13         break
14 print(handle.title)

    可以先保存当前窗口的句柄,在切换新窗口之后,再将driver对应的对象返回到原来的窗口:

  # mainWindow变量保存当前窗口的句柄

  mainWindow = wd.current_window_handle

   #通过前面保存的老窗口的句柄,自己切换到老窗口
  wd.switch_to.window(mainWindow)

猜你喜欢

转载自www.cnblogs.com/Free-Ink/p/12553674.html