selenium-08-新窗口相关操作

为什么要切换窗口?

浏览器点击一个词条可能在原始窗口打开,也可能在新窗口打开。
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:
操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值