目录
1、定位元素
- id(一般全局唯一)
- name
- class name
- link text
- partial link text
- tag name
- xpath(一般全局唯一)
- css selector
定位前提:元素必须拥有这个属性、全局唯一。
2、操作测试对象
一般来说,webdriver 中比较常用的操作对象的方法有下面几个:
- click 点击对象
- send_keys 在对象上模拟按键输入
- clear 清除对象的内容,如果可以的话
- submit 清除对象的内容,如果可以的话
- text 用于获取元素的文本信息
***先搜索,再清除,在搜索
from selenium import webdriver
import time
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("天刀手游")
driver.find_element_by_id("su").click();
time.sleep(4)
driver.find_element_by_id("kw").clear()
time.sleep(2)
driver.find_element_by_id("kw").send_keys("眷思量")
driver.find_element_by_id("su").click()
time.sleep(4)
driver.quit()
submit:
仅限元素有submit属性的;
driver.find_element_by_id("kw").send_keys("天刀手游")
#submit()提交表单,这里和click()功能一样
driver.find_element_by_id("su").submit()
text:用于获取元素的文本信息
from selenium import webdriver
import time
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.maximize_window()
text=driver.find_element_by_id("bottom_layer").text
print(text)
time.sleep(4)
driver.quit()
3、添加等待
(1)固定等待
from selenium import webdriver
import time
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.maximize_window()
#休眠等待,严格执行设置的等待时间
time.sleep(10)
driver.find_element_by_id("kw").send_keys("cxk")
driver.find_element_by_id("su").submit()
time.sleep(4)
driver.quit()
(2)智能等待
- implicitly_wait()
通过添加implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30)的用法应该比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次time_to_wait: 等待时间。
from selenium import webdriver
import time
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("cxk")
driver.find_element_by_id("su").submit()
#隐式等待 轮询查看后续元素存在就执行,到点了不存在就抛出异常
driver.implicitly_wait(8)
driver.find_element_by_link_text("蔡徐坤 - 百度百科").click()
time.sleep(4)
driver.quit()
4、打印tile
- title=driver.title
from selenium import webdriver
import time
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.maximize_window()
title=driver.title
print(title)
driver.find_element_by_id("kw").send_keys("cxk")
driver.find_element_by_id("su").click()
time.sleep(4)
title1=driver.title
print(title1)
driver.quit()
5、打印网址
- driver.current_url
from selenium import webdriver
import time
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
driver.maximize_window()
url=driver.current_url
print(url)
driver.find_element_by_id("kw").send_keys("cxk")
driver.find_element_by_id("su").click()
time.sleep(4)
url1=driver.current_url
print(url1)
driver.quit()
6、浏览器最大化、设置长宽
- driver.maximize_window() #浏览器最大化
- driver.set_window_size(长,宽)
7、操作浏览器的前进、后退
- driver.back() #后退
- driver.forward() #前进
8、控制浏览器滚动条
- 将页面滚动条拖到底部
- 将页面滚动条拖到底部
- js="var q=document.documentElement.scrollTop=10000" #scrollTop:距离顶端距离
- driver.execute_script(js) #execute_script(script, *args),在当前窗口/框架同步执行javaScript
driver=webdriver.Chrome();
driver.get("https://www.baidu.com/")
#driver.maximize_window()
driver.find_element_by_id("kw").send_keys("cxk")
driver.find_element_by_id("su").click()
time.sleep(4)
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)#execute_script(script, *args),在当前窗口/框架同步执行javaScript
time.sleep(4)
driver.quit()
9、键盘事件
(1)键盘按键用
要想调用键盘按键操作需要引入keys 包: from selenium.webdriver.common.keys import Keys
通过send_keys()调用按键:
-
- send_keys(Keys.TAB) # TAB
- send_keys(Keys.ENTER) # 回车
- 禅道登录演示
-
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver=webdriver.Chrome(); driver.get("http://127.0.0.1:88/zentao/user-login-L3plbnRhby8=.html") driver.maximize_window() driver.find_element_by_id("account").send_keys("你的用户名") driver.find_element_by_name("password").send_keys("你的密码") #enter登录 driver.find_element_by_name("password").send_keys(Keys.ENTER) time.sleep(4) driver.quit()
(2)键盘组合键用法
- CTRL+A:
send_keys(Keys.CONTROL,'a')
- 其他同理;
-
- ctrl+a,ctrl+x,enter
-
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver=webdriver.Chrome(); driver.get("https://www.baidu.com/") driver.maximize_window() driver.find_element_by_id("kw").send_keys("cxk") driver.find_element_by_id("su").click(); time.sleep(4) driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') time.sleep(4) driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') time.sleep(4) driver.find_element_by_id("kw").send_keys("蔡徐坤") driver.find_element_by_id("kw").send_keys(Keys.ENTER) time.sleep(4) driver.quit()
10、鼠标事件
- 双击、右击
-
from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains driver=webdriver.Chrome() driver.get("https://www.baidu.com/") driver.maximize_window() driver.find_element_by_id("kw").send_keys("cxk") q=driver.find_element_by_id("su") #右击 ActionChains(driver).context_click(q).perform() time.sleep(6) #双击 ActionChains(driver).double_click(q).perform() time.sleep(6) driver.quit()
11、selenium操作一组元素
一、选中checkbox
from selenium import webdriver
import time
import os
url="file:///"+os.path.abspath("D:/javabit/test-/selenium2html/checkbox.html")
driver=webdriver.Chrome()
driver.get(url)
inputs=driver.find_elements_by_tag_name("input")
for i in inputs:
if i.get_attribute('type')=='checkbox':
i.click()
time.sleep(6)
driver.quit()
二、多层框架窗口定位
#coding=utf-8
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/frame.html')
browser.get(file_path)
browser.implicitly_wait(30)
#先找到到frame1(id = f1)
browser.switch_to.frame("f1")
#再找到其下面的frame2(id =f2)
browser.switch_to.frame("f2")
#下面就可以正常的操作元素了
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
#从f2不可以直接跳转到f1(先回到默认框架,再去f1)
browser.switch_to_default.content()
browser.switch_to.frame("f1")
browser.find_element_by_link_text("click").click()
browser.quit()
三、层级定位
#coding=utf-8
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/level_locate.html')
browser.get(file_path)
time.sleep(4)
browser.find_element_by_link_text("Link1").click()
a=browser.find_element_by_link_text("Another action")
ActionChains(browser).move_to_element(a).perform()
time.sleep(3)
browser.quit()
四、下拉框定位
# coding=utf-8
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/drop_down.html')
browser.get(file_path)
time.sleep(4)
#方法1:
# browser.find_element_by_xpath("//*[@id='ShippingMethod']/option[3]").click()
#方法2:循环遍历 找到value=10.69的
options = browser.find_elements_by_tag_name("option")
# for option in options:
# if option.get_attribute('value') == '10.69':
# option.click()
#方法3:下标
options[2].click()
time.sleep(3)
browser.quit()
12、alert
# coding=utf-8
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/alert.html')
browser.get(file_path)
time.sleep(3)
browser.find_element_by_id("tooltip").click()
time.sleep(2)
#首先获得alert的操作句柄
alert=browser.switch_to.alert
#关闭弹框
alert.accept()
time.sleep(3)
browser.quit()
# coding=utf-8
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/send.html')
browser.get(file_path)
time.sleep(2)
browser.find_element_by_tag_name("input").click()
time.sleep(2)
#首先获得alert的操作句柄
alert=browser.switch_to.alert
#给文本框输入信息
alert.send_keys("cxk")
#关闭弹框
alert.accept()
time.sleep(3)
browser.quit()
13、DIV对话框的处理
# coding=utf-8
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/modal.html')
browser.get(file_path)
time.sleep(2)
#1.点击click按钮
browser.find_element_by_id("show_modal").click()
time.sleep(2)
#2.定位弹框中的元素
browser.find_element_by_id("click").click()
time.sleep(2)
#关闭弹窗
browser.find_element_by_xpath("//*[@id='myModal']/div[3]/button[1]").click()
time.sleep(2)
browser.quit()
14、上传文件
# coding=utf-8
from selenium import webdriver
import time
import os
browser = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('D:/javabit/test-/selenium2html/upload.html')
browser.get(file_path)
time.sleep(2)
#上传操作
browser.find_element_by_name("file").send_keys('D:\\javabit\\122.jpg')
time.sleep(2)
browser.quit()