Python web自动化(iframe、窗⼝等控件切换)

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")


 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值