1、下拉选择框操作

 

下拉选 择实现步骤:

1、导入Select类

 

2、实例化select对象 select=Select(element) # element对象表示的是select元素对象

 

3、通过select的相关方法选择

option选项select.select_by_index(index) 参数index表示的option索引

 

select.select_by_value(value) 参数value表示的是option元属中value的属性值

 

select.select_by_visible_text(visible_text ) 参数visible_text表示的是option的文本内容。

 

 

# 导包
import time
from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import
Select
driver = webdriver.Chrome()
driver.maximize_window()
# 打开测试网站
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A
%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/
web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%
E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.ht
ml")
element = driver.find_element(By.CSS_SELECTOR,"#selectA")
select = Select(element)
# 通过select对象的index来选择广州
time.sleep(2)
select.select_by_index(2)
# 通过select对象的value来选择上海
time.sleep(2)
select.select_by_value("sh")
# 通过select对象的visible来选择深圳
time.sleep(2)
select.select_by_visible_text("深圳")
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

 

 

 

 

 

 

2、弹出框操作

 

弹出框处理步骤:

driver.switch_to.alert 获取弹出框对象

处理弹出框

alert.text 获取弹出框提示信息

alert.accept() 确定弹出框

alert.dismiss() 取消弹出框

 

 

 

 

 

# 导包
import time
from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
# 打开测试网站
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A%A8
%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/web%E8
%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%
E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html")
# 点击alert按钮
driver.find_element(By.ID, "alerta").click()
time.sleep(3)
# 处理弹出框
# 获取弹出框
alert = driver.switch_to.alert
# 打印信息,然后取消
print(alert.text)
alert.dismiss()
# 在用户名输入框中输入admin
driver.find_element(By.ID,'userA').send_keys("admin")
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

 

3、滚动条操作

滚动实现步骤:

控制滚动条到最下方

定义js

js = "window.scrollTo(0, 2000)" # 如果想要移动到最下方,y值给最大值就可以了。

执行JS

driver.execute_script(js)

 

# 导包
import time
from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
# 打开测试网站
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A
%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/
web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%
E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.ht
ml")
time.sleep(3)
# 控制滚动条到最下方
# 1、定义js
js = "window.scrollTo(0, 2000)"
# 2、执行JS
driver.execute_script(js)
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

 

 

2、frame切换、多窗口切换

 

frame切换

frame切换实现方法:

  driver.switch_to.frame(frame_reference) --> 切换到指定frame的方法

frame_reference:可以为frame框架的name、id或者定位到的frame元素

 

  driver.switch_to.default_content() --> 恢复默认页面方法

frame切换原理总结:

针对同一层级的frame,如果要进行切换的话,需要切回到默认首页

 

针对所要进入的frame, 有多少个层级,就需要切换几次

 

不管当前在哪个层级,如果要回到默认首页,只需要调用一次回到默认首页的方法(driver.switch_to.default_content())

 

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A%A8
%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/web%E8
%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%
E5%90%88/pagetest/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%
8B.html")
# 针对主页的用户名输入admin
driver.find_element(By.ID,
"userA").send_keys("admin")
# 针对注册用户a输入用户名adminA
driver.switch_to.frame(driver.find_element(By.ID,"idframe1"))
driver.find_element(By.ID,"AuserA").send_keys("adminA")
# 回到默认首页面
driver.switch_to.default_content()
# 针对注册用户B输入用户名adminB
ele_frame = driver.find_element(By.ID, "idframe2")
driver.switch_to.frame(ele_frame)
driver.find_element(By.ID,"BuserA").send_keys("adminB")
time.sleep(3)
driver.quit()

 

 

 

多窗口切换

 

窗口操作的三种方法

获取当前窗口句柄: driver.current_window_handle

 

获取所有窗口句柄: driver.window_handles 返回的是一个列表

 

切换窗口句柄: driver.switch_to.window(window_handle)

window_handle表示的是要切换到哪个窗口句柄

 

窗口句柄:由操作系统生成的一串唯 一识别码,是一串字符。

 

 

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A
%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/
web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%
E9%9B%86%E5%90%88/pagetest/page/%E6%B3%A8%E5%86%8
C%E5%AE%9E%E4%BE%8B.html")
# 在注册实例页面中点击 注册A页面
driver.find_element(By.ID, "ZCA").click()
time.sleep(1)
# 获取当前窗口句柄信息
print(driver.current_window_handle)
# 获取所有窗口句柄
windows = driver.window_handles
# 切换窗口句柄
driver.switch_to.window(windows[-1])
# 在注册A页中输入用户名和密码
driver.find_element(By.ID,"userA").send_keys("admin")
time.sleep(3)
driver.quit()

窗口切换与frame切换的区别: 窗口切换是指针对浏览器窗口,frame切换针对的是同一个窗口中的html代码。

窗口相当于是同一栋楼的一套房子,frame相当于一套房子中的某一间房子

 

 

 

 

3、窗口截图、验证码处理

 

窗口截图

目的:当程序运行出错时,通过截图文件能够更直观的知道具体是哪个操作步骤出错

 

窗口截图就是指把出错的图片保存到指定位置。

载图方法: driver.get_screenshot_as_file(filename)

  截图的文件名必须是以PNG结尾

  filename中的文件目录必须手动创建

 

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("file:///D:/software/UI%E8%87%AA%E5%8A%A8
%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/web%E8
%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%
E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html")
try:
   # 输入用户名
   driver.find_element(By.ID,"userA").send_keys("admin")
# 输入密码
   driver.find_element(By.ID,"padd").send_keys("1234")
except Exception as e:
   driver.get_screenshot_as_file("img/error.png")
 raise e
time.sleep(3)
driver.quit()