一、 基于python环境搭建
1.python开发环境
2.安装selenium包
(1)通过pip包管理工具安装
安装:pip install selenium
查看:pip show selenium
卸载:pip uninstall selenium
(2)通过pycharm安装
3.安装浏览器
4.安装浏览器驱动
谷歌浏览器:selenium + chrome驱动(chromedriver)
驱动下载地址:https://chromedriver.storage.googleapis.com/
应用:【系统-高级系统设置-环境变量-系统变量-path】中加chromedriver.exe所在的文件夹地址
5.webdriver第一个案例演示
通过程序启动浏览器,并打开百度首页,暂停3秒,关闭浏览器
实现步骤:
(1)导包
form selenium import webdriver
from time import sleep
(2)创建浏览器驱动对象
chrome浏览器:driver=webdriver.Chrome()
edge浏览器:driver=webdriver.Edge()
firefox浏览器:driver=webdriver.Firefox()
(3)打开web页面
driver.get("")
(4)使用id定位,输入admin
element=driver.find_elemengt_by_id("id")#查找 id元素
element.send_keys("admin") #在该id属性的元素对象中输入内容——admin
(5)暂停
time.sleep(3)
(6)关闭驱动对象
driver.quit()
- 二、selenium提供的8种定位元素方式
(1)id
说明:基于元素的id属性来定位元素,id一般情况下在当前页面中是唯一
Selenium3:
方法:element=driver.find_elemengt_by_id("id")#查找 id元素
element.send_keys("admin") #在该id属性的元素对象中输入内容——admin
提示:元素必须要有id属性
Selenium4:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com/")
element = driver.find_element(By.ID, "kw")
element.send_keys("selenium")
time.sleep(5)
(2)name
基于元素特有属性定位
Selenium3:
方法:element=driver.find_elemengt_by_name("name")
element.send_keys("admin")#输入admin
Selenium4:
driver.find_element(By.NAME,'wd').send_keys('百度')
(3)class_name
基于元素特有属性定位,使用元素的class属性定位
Selenium3:
方法:element=driver.find_elemengt_by_class_name("class_name")
element.send_keys("admin")#输入admin
Selenium4:
driver.find_element(By.CLASS_NAME,'nav-search-btn').click()
多个classname相同的对象,通过find_elements()[]查找
driver.find_elements(By.CLASS_NAME,'channel-link')[4].click()
(4)tag_name
基于元素标签名称定位 <标签名 .../>
Selenium3:
方法:element=driver.find_elemengt_by_tag_name("tag_name")#使用tag_name定位
element.send_keys("admin")#输入admin
如果有多个相同标签,则返回符合条件的第一个标签
Selenium4:
driver.find_element(By.TAG_NAME,'input').send_keys("selenium")
(5)link_text
基于超链接 a标签定位(使用全部文本内容匹配元素 精准匹配)
Selenium3:
方法:element=driver.find_elemengt_by_link_text("link_text")
element.click()
Selenium4:
driver.find_element(By.LINK_TEXT,'新闻').click()
(6)partial_link_text
定位超链接 a标签(使用局部或全部文本内容匹配元素)
Selenium3:
方法:element=driver.find_elemengt_by_partial_link_text("partial_link_text")
element.click()
注意:partial_link_text定位元素的内容可以模糊部分值,但是必须能代表唯一性,否则报错
Selenium4:
driver.find_element(By.PARTIAL_LINK_TEXT,'闻').click()
(7)XPath(XML Path)
基于元素路径
Selenium3:
方法:element=driver.find_elemengt_by_xpath(xpath)
策略:
1、路径:绝对路径(以单斜杠/开头);相对路径(以双斜杠//开头,双斜杠后一定要跟标签名或*)
2、路径结合属性:在xpath中属性必须使用@修饰,如 //*[@id='value']
3、路径结合多个属性:如 //*[@id='value' and @name='value']
4、路径结合层级:以双斜杠开头使用单斜杠区分子集,如 //*[@id='value']/input
重点://*[contains(@属性,'value')]
(8)CSS
基于元素选择器
Selenium3:
方法:element=driver.find_elemengt_by_css_selector(css_selector)
Selenium4:
1、id选择器:#id属性
driver.find_element(By.CSS_SELECTOR,'#kw').send_keys("selenium")
2、class选择器:.class属性
driver.find_element(By.CSS_SELECTOR,".nav-search-btn").click()
3、元素选择器:element
driver.find_element(By.CSS_SELECTOR,'a[href="http://image.baidu.com/"]').click()
4、属性选择器:[id='value']
driver.find_element(By.CSS_SELECTOR,"[name='wd']").send_keys("selenium")
5、层级选择器:p>input或p input (>与空格的区别:>必须为子集,空格只要是下属就可以)
driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(3)").click()
延申:
input[type^='p'] type属性以p字母开头的元素
input[type$='d'] type属性以d字母结束的元素
input[type*='w'] type属性包含w字母的元素
三、selenium常见元素定位
(1)Radio单选器
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.iviewui.com/view-ui-plus/component/form/radio")
# radio单选框
driver.find_elements(By.XPATH, '//input[@class="ivu-radio-input" and @type="radio"]')[2].click()
time.sleep(3)
driver.find_element(By.XPATH, '//span[text()="Windows"]').click()
time.sleep(3)
(2)Chechkbox多选框
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.iviewui.com/view-ui-plus/component/form/checkbox")
# checkbox多选框
driver.find_element(By.XPATH,'//span[text()="Facebook"]').click()
time.sleep(3)
driver.find_element(By.XPATH,'//span[text()="香蕉"]').click()
time.sleep(3)
(3)Select选择器
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("https://sahitest.com/demo/selectTest.htm")
# select下拉框
time.sleep(1)
select=Select(driver.find_element(By.ID,'s1'))
# 根据index下标获取,从0开始
select.select_by_index(2)
# 根据option的value进行选择
select.select_by_value("51")
# 根据下拉框内容
select.select_by_visible_text("Cell Phone")
(4)级联选择
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("https://www.iviewui.com/view-ui-plus/component/form/cascader")
# 级联选择器
driver.find_element(By.XPATH,'//input[@class="ivu-input ivu-input-default"]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//li[contains(text(),"江苏")]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//li[contains(text(),"苏州")]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//li[contains(text(),"狮子林")]').click()
(5)时间选择器
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("https://www.iviewui.com/view-ui-plus/component/form/date-picker")
# 日期选择器
driver.find_elements(By.XPATH,'//input[@class="ivu-input ivu-input-default ivu-input-with-suffix"]')[1].send_keys("2024-03-18 - 2024-03-20")
(6)弹框
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()
ent/form/date-picker")
# driver.get("https://sahitest.com/demo/alertTest.htm")
# driver.get("https://sahitest.com/demo/confirmTest.htm")
driver.get("https://sahitest.com/demo/promptTest.htm")
# alert弹框
driver.find_element(By.NAME,'b1').click()
# 使用alert.text获取弹框的文字
print(driver.switch_to.alert.text)
time.sleep(3)
# 点击确定
driver.switch_to.alert.accept()
# #confirm弹框
driver.find_element(By.NAME,'b1').click()
# 使用alert.text获取弹框的文字
print(driver.switch_to.alert.text)
time.sleep(3)
# 点击确定
# driver.switch_to.alert.accept()
# 点击取消
driver.switch_to.alert.dismiss()
# prompt弹框
driver.find_element(By.NAME,'b1').click()
time.sleep(3)
# 点击确定
driver.switch_to.alert.send_keys("测试")
time.sleep(3)
driver.switch_to.alert.accept()
(7)文件上传upoad
import time
from sysconfig import get_path
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from utils.getpath import get_path
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://sahitest.com/demo/fileUpload.htm")
# 文件上传
driver.find_element(By.NAME,'f1').send_keys(r"/Users/user/Desktop/selenium.docx")
time.sleep(3)
#相对路径
path=get_path()
print(path)
upload=driver.find_element(By.NAME,'f2')
upload.send_keys(r"{}".format(path))