web自动化-切换新窗口

一、实现窗口切换的两种方式

第一种方式:
  1、触发新的窗口打开
  2、获取所有打开的窗口。 --- 列表。新窗口都是在列表的最后一个。获取新窗口之前要sleep(2)
     wins_list = driver.window_handles 当前所有窗口的句柄
  3、切换到2中列表的最后一个。
    driver.switch_to(wins_list[-1])
    

第二种方式:
  显性等待当中,有一个条件是关于新窗口的。
  EC.new_window_is_opened(现在已有的窗口句柄列表)
  怎么判断是否有新窗口的??
  len(去重新获取当前的所有窗口句柄) >  len(现在已有的窗口句柄列表)
   
   0、现在已有的窗口句柄列表(win_list = driver.window_handles)
   1、触发新的窗口打开
   2、WebDriverWait(driver,10).until(EC.new_window_is_opened(现在已有的窗口句柄列表))
   3、获取所有打开的窗口。 --- 列表。新窗口都是在列表的最后一个。
     wins_list = driver.window_handles 当前所有窗口的句柄
   4、切换到2中列表的最后一个。
     driver.switch_to(wins_list[-1])

二、代码实现:

方案一

# 导入selenium包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by  import By
# 打开一个浏览器
# 1、启动chromedriver驱动程序
# 2、通过驱动程序,与chrome之间创建一个会话(会话Id)。打开chrome浏览器。
driver = webdriver.Chrome()

#调整为最大窗口:
driver.maximize_window()

#打开百度地址
driver.get("https://www.baidu.com/")

element=driver.find_element(By.XPATH,'//input[@id="kw"]')
element.click()
#输入操作
element.send_keys("陈然")
#点击百度按钮查询
element1 =driver.find_element(By.ID,"su")
element1.click()
#获取新的窗口一定要等一下
sleep(3)
#打开新的窗口
element2=driver.find_element(By.XPATH,'//span[@style="color:;" and text()="陈然"]')
element2.click()
#获取当前所有打开的窗口
wind_list = driver.window_handles
print(wind_list)
sleep(2)
#切换到新窗口:
a=driver.switch_to.window(wind_list[-1])
sleep(2)
element3=driver.find_element(By.XPATH,'//a[@title="革命烈士"]')
element3.click()

sleep(2)
driver.quit()

方案二

from time import sleep
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("http://www.baidu.com")
driver.maximize_window()

# 1、找到输入框这个元素   2、对它进行输入操作
driver.find_element(By.ID,"kw").send_keys("陈然")
driver.find_element(By.ID,"su").click()
wins_list1 = driver.window_handles
print("当前的1个窗口句柄:", wins_list1)
# 元素locator表达
sleep(1)
loc = (By.XPATH, '//span[@style="color:;" and text()="陈然"]')
# 等待  WebDriverWait类
sleep(1)
WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located(loc))
sleep(2)
driver.find_element(*loc).click()
# 获取所有窗口的句柄
wins_list2 = driver.window_handles
print("当前的2个窗口句柄:", wins_list2[-1])

#切换到新的窗口
driver.switch_to.window(wins_list2[-1])
sleep(3)
loc1 = (By.XPATH, '//a[@title="革命烈士"]')
sleep(1)
WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located(loc1))
sleep(2)
driver.find_element(*loc1).click()
sleep(3)

 

posted @ 2023-02-28 21:16  然后呢。。。  阅读(148)  评论(0)    收藏  举报