1.浏览器导航操作
1.后退:
按下浏览器的后退按钮
driver.back()
2)前进:
按下浏览器的前进键
driver.forward()
3)刷新:刷新当前⻚⾯
driver.refresh()
2.JavaScript 警告框,提示框和确认框
Alerts 警告框
这里有一个弹窗的学习网页,它能模拟弹窗时间的发生
1) Alerts 警告框:
# 显示等待,弹窗
alert = wait.until(EC.alert_is_present())
# 获取弹窗中的⽂本信息
text = alert.text
print(text)
# 点击弹窗确认
alert.accept()
我们点击之后出现了一个弹窗
这里我们就需要用显示等待,等待弹窗的出现
""""""
import time
from selenium import webdriver
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("E:\Python\pythonProjects\Webtest0524\day5\JavaScript警告框、提示框和确认框\Testing Alerts.html")
# 点击弹窗
driver.find_element(By.ID,"alert").click()
# 显示等待,弹窗
alert=wait.until(ec.alert_is_present())
print("alert: ", alert)
# 获取弹窗中的文本信息
text = alert.text
print("text: ", text)
assert text == "cheese", "alert用例测试通过"
print("alert用例测试通过")
# 点击弹窗确认
time.sleep(2)
alert.accept()
Confirm 确认框
确认框类似于警告框, 不同之处在于⽤户还可以选择取消
# 显示等待,弹窗
alert = wait.until(EC.alert_is_present())
# 获取弹窗中的⽂本信息
text = alert.text
print(text)
# 点击弹窗取消
alert.dismiss()
""""""
import time
from selenium import webdriver
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("E:\Python\pythonProjects\Webtest0524\day5\JavaScript警告框、提示框和确认框\Testing Alerts.html")
# 点击弹窗
driver.find_element(By.LINK_TEXT, "test confirm").click()
# 显示等待,弹窗
alert = wait.until(ec.alert_is_present())
print("alert: ", alert)
# 获取弹窗中的文本信息
text = alert.text
print("text: ", text)
assert text == "Are you sure?", "alert用例测试通过"
print("alert用例测试通过")
# 点击弹窗取消
time.sleep(3)
alert.dismiss()
Prompt 提示框:
我们可以看到,这种提示框可以进行文本的输入
# 显示等待,弹窗
alert = wait.until(EC.alert_is_present())
# 另⼀种获取alert⽅式,代替driver.switch_to.alert
alert = Alert(driver)
sleep(3)
alert.send_keys("Selenium")
# 点击弹窗取消
alert.accept()
3.与iFrames和frames⼀起⼯作
包含iframe框架的示例代码:
<div id="modal">
<iframe id="buttonframe"name="myframe"src="https://seleniumhq.github.io">
<button>Click here</button>
</iframe>
</div>
如果遇到了这种iframe框架,是⽆法直接对框架内部的元素进⾏定位的,需要先切换到框架中去,在完成定位,并且操作完成后,需要定位框架外部的元素时,还需要退出⼀下框架
1.通过xpath定位:
import time
from selenium import webdriver
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("E:\Python\pythonProjects\Webtest0524\day5\对iframe嵌套框架的处理\click in iframe.html")
# 定位iframe元素
iframe = driver.find_element(By.XPATH, '//*[@id="ifr"]')
print("iframe: ", iframe)
# 进入iframe
driver.switch_to.frame(iframe)
# 点击元素
driver.find_element(By.LINK_TEXT, "Click me").click()
time.sleep(3)
2.通过iframe的id和name进行定位
""""""
import time
from selenium import webdriver
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("E:\Python\pythonProjects\Webtest0524\day5\对iframe嵌套框架的处理\click in iframe.html")
# 定位iframe元素
iframe = driver.find_element(By.ID, 'ifr')
print("iframe: ", iframe)
# 进入iframe
driver.switch_to.frame(iframe)
# 点击元素
driver.find_element(By.LINK_TEXT, "Click me").click()
time.sleep(3)
3.通过索引定位iframe框架
""""""
import time
from selenium import webdriver
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("E:\Python\pythonProjects\Webtest0524\day5\对iframe嵌套框架的处理\click in iframe.html")
# 通过索引,进入iframe
driver.switch_to.frame(0)
# 点击元素
driver.find_element(By.LINK_TEXT, "Click me").click()
time.sleep(3)
4.同窗⼝和标签⼀起⼯作
1.打开并切换新的标签页或窗口
""""""
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://novel.hctestedu.com/")
# 打开新标签⻚并切换到新标签⻚
driver.switch_to.new_window('tab')
time.sleep(3)
driver.get("http://novel.hctestedu.com/")
# 打开一个新窗口,并切换到新窗口
driver.switch_to.new_window('window')
2.获取新窗口的几种方式
""""""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
"""
登录操作
"""
# 预置用户名和密码变量
username = "17798989898"
passwd = "123456"
# 打开读书屋项目登陆的网址
driver.get("http://120.25.127.201:18001/")
# 登陆操作
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.get("http://novel.hctestedu.com/")
# 获取当前窗口句柄
now_window = driver.current_window_handle
print("获取当前窗口句柄: ", now_window)
# 获取所有的窗口句柄
# all_window = driver.window_handles
# print("获取所有的窗口句柄: ", all_window)
# 检查当前是否存在多个窗口
# assert len(all_window) == 1, "当前存在多个窗口"
# print("当前有且仅有一个窗口")
# 点击作家专区,打开新的窗口
driver.find_element(By.LINK_TEXT, "作家专区").click()
time.sleep(3)
# 切换窗口,方式1:
# 1.获取所有打开的窗口
# all_window = driver.window_handles
# print("获取所有打开的窗口: ", all_window)
# 2.循环判断不等于之前打开的窗口,然后进行切入,并且完成后续的操作
# for i in all_window:
# if i != now_window: # 判断获取的窗口的值,不等于之前打开的窗口
# driver.switch_to.window(i)
# break
# 切换窗口,方式2:
# 1.获取所有打开的窗口
all_window = driver.window_handles
print("获取所有打开的窗口: ", all_window)
# 2.通过直接切换到所有窗口的最后一个值
driver.switch_to.window(all_window[-1])
driver.find_element(By.LINK_TEXT, "发布小说").click()
time.sleep(3)
# 关闭页签或窗口
driver.close()
# 切回之前的窗口
driver.switch_to.window(now_window)
引用try和finally关闭所有窗口
""""""
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()
# 获取当前窗口句柄
now_window = driver.current_window_handle
print("获取当前窗口句柄: ", now_window)
# 点击作家专区,打开新的窗口
driver.find_element(By.LINK_TEXT, "作家专区").click()
time.sleep(3)
# 获取所有的窗口句柄
all_window = driver.window_handles
print("获取所有的窗口句柄: ", all_window)
# 检查当前是否存在多个窗口
assert len(all_window) == 1, "当前存在多个窗口"
print("当前有且仅有一个窗口")
finally:
driver.quit()
引用with让用例执行结束后自动关闭
with有自动关闭文件的功能
""""""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
"""
通过try和finally的组合,最后关闭所有的浏览器窗口
"""
# with open("文件路径", encoding="utf-8", mode="r") as f:
with webdriver.Chrome() as driver:
"""
登录操作
"""
# 预置用户名和密码变量
username = "17798989898"
passwd = "123456"
# 打开读书屋项目登陆的网址
driver.get("http://120.25.127.201:18001/")
# 登陆操作
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()
# 获取当前窗口句柄
now_window = driver.current_window_handle
print("获取当前窗口句柄: ", now_window)
# 点击作家专区,打开新的窗口
driver.find_element(By.LINK_TEXT, "作家专区").click()
time.sleep(3)
# 获取所有的窗口句柄
all_window = driver.window_handles
print("获取所有的窗口句柄: ", all_window)
# 检查当前是否存在多个窗口
assert len(all_window) == 1, "当前存在多个窗口"
print("当前有且仅有一个窗口")
5.窗⼝管理
""""""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://120.25.127.201:18001/")
# 分别获取窗口的宽、高的尺寸
# width = driver.get_window_size().get("width")
# height = driver.get_window_size().get("height")
# print("width: ", width)
# print("height: ", height)
# driver.maximize_window()
# 另一种写法
# size = driver.get_window_size()
# width1 = size.get("width")
# height1 = size.get("height")
# print("width1: ", width1)
# print("height1: ", height1)
# 设置窗口的大小
# time.sleep(3)
# driver.set_window_size(1200, 1011)
# 得到窗口的位置,浏览器的左上角的坐标
# 左上角(0, 0)
# x为正数,右
# y为正数,下
# x = driver.get_window_position().get('x')
# y = driver.get_window_position().get('y')
# print("x: ", x)
# print("y: ", y)
# 移动窗口的位置
# driver.set_window_position(1534, 200)
# 最大化窗口
# driver.maximize_window()
# time.sleep(3)
# 最小化窗口
# driver.minimize_window()
# time.sleep(3)
# 全屏窗口,类似按下F11
# driver.fullscreen_window()
# 屏幕截图
driver.save_screenshot("./屏幕截图.png")
# 元素截图
el = driver.find_element(By.LINK_TEXT, "充值")
el.screenshot("./元素截图.png")