(一)Alert
三种方式:
test:获取弹出框的文本信息
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/Administrator/Desktop/%E8%AD%A6%E5%91%8A%E6%A1%86.html')
#获取警告框里面的文本信息
time.sleep(3)
print(driver.switch_to.alert.text)
#点击确定按钮
driver.switch_to.alert.accept()
time.sleep(3)
driver.close()
accept、dismiss:accept是接受Confirm弹出框 dismiss是拒绝接受Confirm弹出框
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/Administrator/Desktop/%E7%A1%AE%E5%AE%9A%E6%B6%88%E6%81%AF.html')
time.sleep(3)
#定位到请点击,并点击请点击
driver.find_element(By.XPATH,'/html/body/center/input').click()
time.sleep(3)
#点击确定按钮
driver.switch_to.alert.accept()
time.sleep(3)
#刷新后重复第一次的操作,点击请点击
driver.refresh()
driver.find_element(By.XPATH,'/html/body/center/input').click()
time.sleep(3)
#点击取消按钮
driver.switch_to.alert.dismiss()
time.sleep(3)
driver.close()
send_keys:send_keys是在Prompt消息对话框里面输入想要输入的内容
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
#消息对话框输入想要的内容send_keys
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/Administrator/Desktop/%E6%B6%88%E6%81%AF%E5%AF%B9%E8%AF%9D%E6%A1%86.html')
time.sleep(3)
driver.find_element(By.XPATH,'/html/body/center/input').click()
time.sleep(2)
#输入想要的内容
driver.switch_to.alert.send_keys('无涯教育')
time.sleep(2)
driver.switch_to.alert.accept()
time.sleep(2)
driver.close()
(二)、悬浮
1、右键出现悬浮框
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://baidu.com')
#实例化
obj=ActionChains(driver=driver)
time.sleep(3)
#定义so=定位到的输入框
so=driver.find_element(By.ID,'kw')
#右键
obj.context_click(so).perform()
time.sleep(3)
driver.close()
2、双击(场景:验证商品双击支付按钮是否会出现两笔订单)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://baidu.com')
obj=ActionChains(driver=driver)
time.sleep(3)
driver.find_element(By.ID,'kw').send_keys('admin')
button=driver.find_element(By.ID,'su')
obj.double_click(button).perform()
time.sleep(3)
driver.close()
思路:我们在百度输入框输入admin后双击‘百度一下’
3、悬浮
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://baidu.com')
obj=ActionChains(driver=driver)
time.sleep(3)
settings=driver.find_element(By.XPATH,'//*[@id="s-usersetting-top"]')
obj.move_to_element(settings).perform()
time.sleep(3)
#点击搜索设置(利用ctrl+f)
driver.find_element(By.XPATH,'//*[@id="s-user-setting-menu"]/div/a[1]/span').click()
time.sleep(2)
#点击保存设置
driver.find_element(By.XPATH,'//*[@id="se-setting-7"]/a[2]').click()
time.sleep(2)
#获取弹出框的文本信息
print(driver.switch_to.alert.text)
driver.switch_to.alert.accept()
driver.close()
思路:我们自动化点击百度首页的设置,选择搜索设置,选择保存设置后输出结果
(三)、键盘事件(以代码代替键盘进行复制粘贴等操作)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
#以百度为例,进行输入框写入内容,再Ctrl+a全选,然后复制,再删除,再粘贴
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(2)
so=driver.find_element(By.ID,'kw')
so.send_keys('无涯 接口测试')
time.sleep(2)
#全选
so.send_keys(Keys.CONTROL,'a')
time.sleep(2)
#复制
so.send_keys(Keys.CONTROL,'c')
time.sleep(2)
#删除
so.send_keys(Keys.BACKSPACE)
time.sleep(2)
#粘贴
so.send_keys(Keys.CONTROL,'v')
time.sleep(2)
driver.close()
(四)、WebDriverWait
等待分为三种
1、固定等待,也就是使用sleep()方法
2、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间
3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继
续执行,那么如果判断失败,就会报TimeOutException的异常信息
'''
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 es
import time
#资源可见式操作
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.implicitly_wait(30)
obj=WebDriverWait(
driver=driver,
timeout=10).until(
method=es.element_to_be_clickable((By.ID,'kw')))
obj.send_keys('百度测试')
time.sleep(2)
driver.close()
#指定元素的文本信息
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://mail.sina.com.cn')
driver.implicitly_wait(30)
time.sleep(2)
driver.find_element(By.CLASS_NAME,'loginBtn').click()
obj=WebDriverWait(
driver=driver,
timeout=10).until(
method=es.text_to_be_present_in_element((By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]'),'请输入邮箱名'))
time.sleep(2)
driver.close()
#判断元素是否可见
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.implicitly_wait(30)
obj=WebDriverWait(
driver=driver,
timeout=10).until(
method=es.visibility_of_element_located((By.LINK_TEXT,'关于百度')))
print(obj.is_displayed())
obj.click()
time.sleep(2)
driver.close()
(五)、iframe页面的框架
场景
当一个页面存在页面的框架的时候,我们使用一般的元素定位是会出错的,那么这个时候就找一下是否存在iframe的框架
进入框架的方试
按照ID&NAME&索引
案例
我们以腾讯文件为例(我们需要点的‘密码登录’是在两层框架之下的,所以思路就是我们先进入到一级框架,在进入到二级框架,这样才可以定位到‘密码登录’)
1、ID的方式
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://file.qq.com/')
driver.implicitly_wait(30)
#进入到第一层级的iframe
driver.switch_to.frame('login_frame1')
time.sleep(2)
#进入到第二层级的iframe
driver.switch_to.frame('ptlogin_iframe')
time.sleep(2)
driver.find_element(By.ID,'switcher_plogin').click()
time.sleep(3)
driver.close()
2、索引的方式
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://file.qq.com/')
driver.implicitly_wait(30)
#进入到第一层级的iframe
driver.switch_to.frame(0)
time.sleep(2)
#进入到第二层级的iframe
driver.switch_to.frame(0)
time.sleep(2)
driver.find_element(By.ID,'switcher_plogin').click()
time.sleep(3)
driver.close()