基于python语言的selenium实战操作(三)

1. selenium鼠标、键盘操作

ActionChains类中封装了对 鼠标事件 操作的方法,常见方法有:

  • context_click() 右击 --> 此方法模拟鼠标右键效果
  • double_click() 双击 --> 此方法模拟鼠标双击效果
  • drag_and_drop() 拖动 --> 此方法模拟鼠标拖动效果
  • move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
  • perform() 执行 --> 此方法用来执行封装在ActionChains的行为
	from time import sleep
	
	from selenium import webdriver
	from selenium.webdriver import ActionChains
	
	driver = webdriver.Chrome()
	driver.get("http://www.baidu.com")
	# 定位“更多”的位置
	element = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[3]/div/a')
	# 将鼠标移动到该位置
	ActionChains(driver).move_to_element(element).perform()
	sleep(3)
	driver.quit()

Keys中封装了 键盘 上的按键或者组合键的字段,sendkeys()方法可以用来模拟键盘输入,除此之外还可以使用sendkeys方法发送文件到服务器(上传功能以input标签实现),常见的键盘事件操作有:

  • send_keys(Keys.Back_SPACE):删除键
  • send_keys(Keys.SPACE):空格键
  • send_keys(Keys.TAB):制表键
  • send_keys(Keys.ESCAPE):esc键
  • send_keys(Keys.ENTER):回车键
  • send_keys(Keys.CONTROL,’a’):全选
  • send_keys(Keys.CONTROL,’c’):复制
  • send_keys(Keys.CONTROL,’x’):剪切
  • send_keys(Keys.CONTROL,’v’):粘贴
  • send_keys(Keys.F1):F1键
	from time import sleep
	from selenium import webdriver
	from selenium.webdriver.common.keys import Keys
	
	driver = webdriver.Chrome()
	# 打开浏览器的百度首页
	driver.get("https://www.baidu.com")
	# 在输入框中输入“seleniumm”
	driver.find_element_by_id("kw").send_keys("seleniumm")
	# 等待1秒
	sleep(1)
	# 去掉seleniumm的m
	driver.find_element_by_id("kw").send_keys(Keys.BACKSPACE)
	sleep(1)
	# 追加空格
	driver.find_element_by_id("kw").send_keys(Keys.SPACE)
	sleep(1)
	# ctrl + a全选
	driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
	sleep(1)
	# ctrl + x剪切
	driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
	sleep(1)
	# ctrl + v粘贴
	driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
	sleep(1)
	# enter
	driver.find_element_by_id("kw").send_keys(Keys.ENTER)
	sleep(3)
	driver.quit()

2. 判断元素状态

  • is_displayed(): 设置该元素是否用户可见,结果就是真和假。
  • is_enabled():判断是否可用
  • is_selected:判断是否选中,一般用复选框或者单选框的判断
	#导包、创建浏览器对象、打开百度首页
	from selenium import webdriver
	import time
	
	driver = webdriver.Chrome()
	driver.get("https://www.baidu.com")
	
	#判断百度一下按钮是否显示出来了
	# if driver.find_element_by_id("su").is_displayed():
	if driver.find_element_by_id("su").is_enabled():#判断是否可用
	    print("正常显示了百度一下")
	else:
	    print("显示失败")
	
	#退出浏览器对象
	driver.quit()

3. 多窗口操作

每一个页面都一个句柄(handle)值,对一个页面来说是唯一,是页面的一个标识webdriver进行自动化测试,需要将driver绑定到页面句柄,你的driver只能控制你绑定句柄的这个页面,因此对不同的窗口页面的元素,driver就不能操作

	from time import sleep
	from selenium import webdriver
	
	driver = webdriver.Chrome()
	# 打开淘宝页面
	driver.get("https://www.taobao.com")
	sleep(2)
	# 点击聚划算
	driver.find_element_by_partial_link_text("聚划算").click()
	# 打开所有窗口句柄
	handles = driver.window_handles
	# 切换句柄,转到聚划算窗口
	driver.switch_to.window(handles[1])
	sleep(1)
	# 点击女装
	driver.find_element_by_link_text("女装").click()
	driver.back()
	sleep(2)
	driver.quit()

4. 截屏

将运行的页面截图保存在本地,推荐使用png格式:

  • driver.save_screenshot(r"e:\abc.png")
  • driver.get_screenshot_as_file("{}.{}".format(“e:/aaa”,“png”))
  • driver.get_screenshot_as_file(r"e:\abc.png")
	from selenium import webdriver
	import time
	
	driver = webdriver.Chrome()
	driver.get("https://www.baidu.com")
	
	# driver.save_screenshot(r"e:\sss.png")
	# driver.get_screenshot_as_file("{}.{}".format("e:/aaa","png"))
	# driver.get_screenshot_as_file(r"e:\sss.png")
	
	# driver.quit()

5. 浏览器的前进、后退与刷新

在使用浏览器浏览网页时,浏览器提供了前进、后退与刷新按钮,可以方便的在浏览过的页面之间来回切换、刷新

  • back()
  • forward()
  • refresh()
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

#页面的前进后退操作
# driver.find_element_by_link_text("新闻").click()
# time.sleep(2)

# 后退到百度首页
# driver.back()
# time.sleep(2)
# 前进到新闻页面
# driver.forward()
# time.sleep(2)
# 执行一次刷新操作
# driver.refresh()

# 退出浏览器对象
# driver.quit()

6. iframe/frame页面嵌套操作

在一个页面中可以嵌套另外一个页面,如frame/iframe技术,这是现在很多web应用中使用的一种方式,webdriver对象只能在一个页面(外层是默认的)中定位元素,需要一种方式将driver对象从外层切换给内层使用才能对内层的对象进行处理。

	'''
	打开腾讯首页(www.qq.com)
	点击首页的邮箱按钮
	点击账号密码登录/点击基本版本
	'''
	from time import sleep
	from selenium import webdriver
	
	driver = webdriver.Chrome()
	driver.get("https://www.qq.com")
	driver.find_element_by_link_text("Qmail").click()
	
	# 切换页面句柄
	handles = driver.window_handles
	driver.switch_to.window(handles[1])
	
	# 点击基本版
	# driver.find_element_by_link_text("基本版").click()
	# sleep(2)
	
	# 将driver切换到内层页面上
	
	# 可以使用name,id
	driver.switch_to.frame("login_frame")
	
	# 可以使用frame索引
	# driver.switch_to.frame(1)
	
	# 直接给frame对象,frame标签属于外面页面
	# frameObject = driver.switch_to.frame("login_frame")
	# driver.switch_to.frame(frameObject)
	
	driver.find_element_by_class_name("switch_btn").click()
	sleep(2)
	
	# 把焦点切回来,切回主文档
	driver.switch_to.default_content()
	driver.find_element_by_link_text("基本版").click()
	sleep(2)
	
	driver.quit()

猜你喜欢

转载自blog.csdn.net/yang_yang_heng/article/details/108549530