文章目录
为什么要切换窗口?
浏览器点击一个词条可能在原始窗口打开,也可能在新窗口打开。
1.当在原始窗口打开时候,原始窗口的句柄是不变的,对元素定位没有影响。
2.在新窗口打开时,就会出现定位不到元素的问题
切换窗口
# coding = utf-8
# Author:dan.zhang
# Date:2023/11/25 10:38
"""
selenium-新窗口练习
"""
import time
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# 初始化浏览器
driver = webdriver.Chrome()
wait = WebDriverWait(driver,5)
# 打开百度页面
driver.get("http://www.baidu.com")
driver.maximize_window()
# 获取当前窗口的句柄
original_window = driver.current_window_handle
print("current_handle1:",original_window)
# 在搜索框中输入“百度百科”并回车进行搜索
el = driver.find_element(By.ID,"kw")
el.send_keys("百度百科")
el.send_keys(Keys.ENTER)
# 获取当前窗口的句柄
current_handle2 = driver.current_window_handle
print("current_handle2:",current_handle2)
# 备注:original_window=current_handle2所以原窗口打开新的页面,不会影响元素定位
# time.sleep(5)
# driver.find_element(By.PARTIAL_LINK_TEXT,'全球领先的中文百科全书').click()
locator = (By.PARTIAL_LINK_TEXT,'全球领先的中文百科全书')
el = wait.until(EC.visibility_of_element_located(locator))
el.click()
# 此时获取的窗口句柄依旧等于original_window,说明虽然打开了新的窗口,但是还不能去定位里面的元素,需要切换窗口
current_handle3 = driver.current_window_handle
print("current_handel3:",current_handle3)
all_handles = driver.window_handles
print("all_handles:",all_handles)
# 切换窗口的方式
driver.switch_to.window(all_handles[-1])
# 对比得出句柄已经切换
current_handle4 = driver.current_window_handle
print("current_handle4:",current_handle4)
locator = (By.XPATH,"//input[@id='query']")
el = wait.until(EC.visibility_of_element_located(locator))
el.send_keys("你好!")
time.sleep(2) # 为方便观看结果强制等待两秒
# 切换回原窗口
driver.switch_to.window(original_window)
time.sleep(2) # 为方便观看结果强制等待两秒
driver.quit()
设置窗口-(设置大小,位置,最大/小化,屏幕截图,元素截图)
# coding = utf-8
# Author:dan.zhang
# Date:2023/11/25 15:17
"""
selenium练习:设置窗口
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
wait = WebDriverWait(driver,5)
driver.get("https://www.baidu.com")
# 获取窗口大小
window_size=driver.get_window_size()
size_width=driver.get_window_size().get("width")
size_height=driver.get_window_size().get("height")
print(f"window_size:{window_size},size_width:{size_width},size_height:{size_height}")
# 设置窗口大小
driver.set_window_size(size_width-10,size_height-100)
print("new_window_size:",driver.get_window_size())
time.sleep(2)
# 获取窗口坐标
positoin = driver.get_window_position()
x = driver.get_window_position().get("x")
y = driver.get_window_position().get("y")
print(f"positoin:{positoin},x:{x},y:{y}")
# 设置窗口位置
position = driver.set_window_position(x+200,y+200)
print("new_position:",driver.get_window_position())
time.sleep(2)
# 其他设置
driver.maximize_window()
driver.minimize_window()
driver.fullscreen_window() # 全屏窗口,类似按下F11
time.sleep(2)
# 窗口截图
driver.save_screenshot("./window.png")
el = driver.find_element(By.XPATH,'//*[@id="lg"]')
el.screenshot("./element.png")
time.sleep(2)
driver.quit()
用例执行结束自动退出浏览器(无论是否发生异常最终都退出)
通过try:…finally:…方法
# coding = utf-8
# Author:dan.zhang
# Date:2023/11/25 15:38
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
"""
通过try和finally的组合,最后关闭所有的浏览器窗口
"""
driver = webdriver.Chrome()
try:
"""
登录操作
"""
# 预置用户名和密码变量
username = "17798989898"
passwd = "123456"
# 打开网址
driver.get("http://novel.hctestedu.com/user/login.html")
# 登陆操作
driver.find_element(By.XPATH, "//input[@id='txtUName']").send_keys(username)
# 登录页-密码框
driver.find_element(By.XPATH, "//input[@id='txtPassword']").send_keys(passwd)
# 登录页-登陆按钮
driver.find_element(By.XPATH, "//input[@id='btnLogin']").click()
# 点击作家专区,打开新的窗口 由于做家专区这里可能还没加载出来可能会报错,报错后就会关闭浏览器
driver.find_element(By.LINK_TEXT, "作家专区").click()
time.sleep(3)
finally:
driver.quit()
通过with…as…:
# coding = utf-8
# Author:dan.zhang
# Date:2023/11/25 16:00
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
with webdriver.Chrome() as driver:
"""
登录操作
"""
# 预置用户名和密码变量
username = "17798989898"
passwd = "123456"
# 打开网址
driver.get("http://novel.hctestedu.com/user/login.html")
# 登陆操作
driver.find_element(By.XPATH, "//input[@id='txtUName']").send_keys(username)
# 登录页-密码框
driver.find_element(By.XPATH, "//input[@id='txtPassword']").send_keys(passwd)
# 登录页-登陆按钮
driver.find_element(By.XPATH, "//input[@id='btnLogin']").click()
# 点击作家专区,打开新的窗口 由于做家专区这里可能还没加载出来可能会报错,报错后就会关闭浏览器
driver.find_element(By.LINK_TEXT, "作家专区").click()
time.sleep(3)
总结
4+4+4+3+2
切换窗口
driver.current_window_handle
driver.window_handles
driver.switch_to.window[all_handles[-1]]
driver.switch_to.window[original_handle]
窗口大小
driver.get_window_size()
driver.get_window_size().get(“width”)
driver.get_window_size().get(“height”)
driver.set_window_size(width,height)
窗口位置
driver.get_window_position()
driver.get_window_position().get(“x”)
driver.get_window_position().get(“y”)
driver.set_window_position(x,y)
最大化、最小化、全屏
driver.maximize_window()
driver.minimize_window()
driver.fullscreen_window()
屏幕截图、元素截图
driver.save_screenshot(“./window.png”)
el.screenshot(“./element.png”)
用例执行结束,关闭浏览器
方法一:
try:
操作
finally:
driver.quit()
方法二:
with webdriver.Chrome() as driver:
操作