web自动化测试:浏览器的窗口切换

代码如下:

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
driver.implicitly_wait(6)

#搜索Taylor swift
driver.find_element_by_id("kw").send_keys("Taylor swift")
driver.find_element_by_xpath("//input[@value='百度一下']").click()

#判断下面定位的元素是否出现并点击
down_data_click = WebDriverWait(driver,5).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,
                                    "div[id='wrapper_wrapper']>div[id='container']>div[id='content_left']"
                                    ">div[class='result-op c-container new-pmd']"
                                    ">h3[class='t c-gap-bottom-small']>a")))
down_data_click.click()
sleep(3)

#获取所有窗口的句柄
allHandles = driver.window_handles
print("所有窗口的句柄:" + str(allHandles))
#获取当前窗口的句柄
current_windowHandles = driver.current_window_handle
print("当前窗口的句柄:" + current_windowHandles)
sleep(5)
#切换成第一个窗口
driver.switch_to.window(allHandles[0])
sleep(5)
#获取第一个窗口的句柄
one_linux = driver.current_window_handle
print("第一个窗口的句柄:" + one_linux)
sleep(3)

#切换到最新窗口
driver.switch_to.window(allHandles[-1])
#获取最新窗口的句柄
latest_linux= driver.current_window_handle
print("最新窗口的句柄:" + latest_linux)
sleep(3)

#****  对最新的窗口进行操作:点击“讨论” ****
driver.find_element_by_css_selector("div[class='feature-poster-bg']>div[class='layout lemmaWgt-posterBg']"
                                    ">div[class='poster-top']"
                                    ">dl[class='lemmaWgt-lemmaTitle lemmaWgt-lemmaTitle-light']"
                                    ">dd[class='lemmaWgt-lemmaTitle-title']"
                                    ">a[class='lemma-discussion cmn-btn-hover-blue cmn-btn-28 j-discussion-link']").click()
sleep(8)
#********

driver.quit()

运行结果显示:
在这里插入图片描述

下面来讲解一下:
driver.window_handles,指获取所有窗口的句柄;
driver.current_window_handle,指获取当前窗口的句柄;
driver.switch_to.window(句柄下标),指跳转到对应句柄下标的窗口;

若这里用allClick来代表获取的所有句柄,那么allClick[0]代表跳转之前的窗口,allClick[1]代表跳转之后的窗口,allClick[-1]代表最后出现的窗口【最新页面】,下标从0开始,0123。这个下标是按你实际操作窗口的顺序来决定的,最先打开的窗口为0,接下来打开的就是1,2等,-1表示最后出现的窗口。
若想将窗口A切换到窗口B,那么在切换窗口之前,需要先输出窗口A的句柄和窗口B的句柄,然后跳转窗口 driver.switch_to.window(B),跳转之后输出当前窗口的句柄,比较是不是与跳转之前B窗口的句柄一样,若是一样则说明跳转成功,那么可以直接操作执行B窗口页面的元素了

注意:窗口句柄的变化代表着窗口的跳转,句柄可以指代窗口的属性。

猜你喜欢

转载自blog.csdn.net/qq_43096786/article/details/113795145