【第04节】Selenium4 元素等待与表单切换实战(Python Web自动化测试)

1、元素等待

元素等待分别有三种:强制等待、隐藏等待、显示等待。

1.1 强制等待

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 请求 百度
driver.get("https://www.baidu.com")
# 输入需要搜索的数据
driver.find_element(By.ID,'kw').send_keys("Python Web自动化测试")
# 强制等待时间为 3 秒
sleep(3)
driver.find_element(By.ID,'su').click()
# 强制等待 3 秒退出
sleep(3)
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

1.2 隐藏等待

from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 请求 百度
driver.get("https://www.baidu.com")
# 输入需要搜索的数据
driver.find_element(By.ID,'kw').send_keys("Python Web自动化测试")
# 隐藏等待时间为 30 秒,默认是 0 
driver.implicitly_wait(30)
driver.find_element(By.ID,'su').click()
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

注意:使用隐藏等待,如果超时后,仍然没有找到元素,系统会抛异常。

1.3 显示等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 请求 百度
driver.get("https://www.baidu.com/")
# 显示等待使用  WebDriverWait(driver,时间,每个时间).until(EC.presence_of_element_located(定位元素代码))
WebDriverWait(driver,3,0.5).until(EC.presence_of_element_located((By.ID,'kw'))).send_keys("126网易邮箱")
driver.find_element(By.ID,'su').click()
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

2、表单切换

表单切换分别为:单表单、嵌套表单、平行表单。

2.1 单表单切换

可以找到页面元素 iframe 标签进行操作
切换与退出方法
driver.switch_to.frame(‘iframe的id与名字选一即可’)
driver.switch_to.default_content()

from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 请求 百度
driver.get("https://mail.sina.com.cn/")
# 切换 iframe 标签
driver.switch_to.frame('ckctlFrame')
driver.find_element(By.ID,'freename').send_keys('kasthsoft@sina.com')
driver.find_element(By.ID,'freepassword').send_keys('password')
driver.find_element(By.LINK_TEXT,'登录').click()
# 退出 iframe 标签
driver.switch_to.default_content()
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)

driver.get("https://mail.qq.com/")
# 切换 iframe 标签
driver.switch_to.frame('login_frame')
driver.find_element(By.ID,'u').send_keys('807002272')
driver.find_element(By.ID,'p').send_keys('password')
driver.find_element(By.ID,'login_button').click()
# 退出 iframe 标签
driver.switch_to.default_content()

# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

2.2 嵌套表单切换

注意:这里表现要从第一标签开始进行切换,这样才能正常找到标签,否则会报错。

这里没有找到可以演示网站,直接运行代码会报错,可以参考代码举一反三。

from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
# 先切换最外层 iframe 标签
driver.switch_to.frame('iframe1')
# 再切换到第二或第三 iframe 标签
driver.switch_to.frame('iframe2')
driver.switch_to.frame('iframe3')
driver.find_element(By.ID,'xxx').send_keys('xxxxx')

2.3 平行表单切换

注意:平行表单切换,找到了 iframe 1 标签后,需要先退出,然后切换到 iframe 2 标签 操作元素。

from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)

driver.get("https://mail.qq.com/")
# 切换 微信登录 iframe 标签
driver.switch_to.frame('login_wx_iframe')
# 退出 微信 iframe 标签
driver.switch_to.default_content()
# 切换 QQ 登录 iframe 标签
driver.switch_to.frame('login_frame')
driver.find_element(By.ID,'u').send_keys('807002272')
driver.find_element(By.ID,'p').send_keys('password')
driver.find_element(By.ID,'login_button').click()
# 退出 QQ iframe 标签
driver.switch_to.default_content()
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

2.4 表单特殊情况处理

表单特殊情况是指,iframe 没有固定 id 与 name。

注意: 无法精准定位的时候,建议使用 By.XPATH 定位方法。

from selenium import webdriver
from selenium.webdriver.common.by import By


# 打开Chrome浏览器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)

driver.get("https://126.com/")
# 使用 By.XPATH  获取元素
xpath = driver.find_element(By.XPATH ,'//div[@id="loginDiv"]/iframe')
# 将获取 iframe 元素切换
driver.switch_to.frame(xpath)
# 输入账号
driver.find_element(By.NAME,'email').send_keys('kasthsoft')
# 输入密码
driver.find_element(By.NAME,'password').send_keys('password')
driver.find_element(By.ID,'dologin').click()
# 退出 iframe 标签
driver.switch_to.default_content()

# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一禅(OneZen)

你的鼓励将是我创作的最大动力哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值