selenium

本文介绍了如何搭建Selenium自动化测试环境,包括安装Python、Selenium库和不同浏览器驱动。接着,详细列举了Selenium的基本操作,如打开浏览器、窗口管理、元素交互等,以及各种定位策略,如CSS选择器和XPath。此外,还涵盖了切换窗口、处理下拉框、弹窗及JavaScript调用等高级功能。
摘要由CSDN通过智能技术生成

1、selenium环境搭建

        (1)安装python:地址https://www.python.org/

        (2)安装selenium:在命令行安装pip install selenium

        (3)安装浏览器及其驱动

        安装浏览器以及其对应版本的驱动。

                Chrome浏览器驱动:https://chromdriver.storage.googleapis.com/index.html

                Firefox浏览器驱动:https://github.com/mozilla/geckodriver/releases

                IE浏览器驱动:https://selenium-release.storage.googleapis.com/index.html

        (4)脚本开发工具:Pycharm

2、常用方法

from selenium import webdriver    #引入webdriver

driver=webdriver.Chrom()           #启动浏览器
driver.get("https://www.baidu.com")    #打开百度
driver.set_window_size(480,800)    #改变浏览器像素大小
driver.maximize_window()        #最大化浏览器窗口
driver.implititly_wait(30)     #隐式等待30秒
driver.back()    #后退到上一个页面
driver.forward()    #请进到下一个页面
driver.refresh()    #浏览器刷新
driver.close()    #关闭当前窗口,浏览器不关闭
driver.quit()     #关闭所有窗口及浏览器驱动
driver.add_cookie()     #添加cookie
driver.get_cookies()    #获取cookies
driver.current_window_handle   #获取当前窗口
driver.window_handles  #获取浏览器全部窗口
driver.switch_to.window()  #切换窗口
driver.switch_to.frame(driver.find_element_by_id('kw'))    #切换内嵌式框架frame,可以通过索引、id和name属性值、元素对象定位
driver.switch_to.default_content()  #回到主文档
driver.switch_to.parent_frame()  #回到当前内嵌式框架frame的上一层
driver.excute_script(js)    #执行js语句
driver.title    #获取当前窗口的标题

3、常用元素操作方法

locator=driver.find_element_by_xpath("//a[contains(@class,'bg')")        #定位元素
locator.clear()    #清空元素的文本信息
locator.click()    #点击元素
locator.send_keys("值")    #输入值
locator.submit()    #提交表单
locator.text        #获取元素文本
locator.size()      #获取元素大小
locator.get_attribute("class")    #获取元素属性值

4、selenium常用定位方法

driver.find_element_by_id("kw")                     #标签属性id定位
driver.find_element_by_name("kw")                    #标签属性name定位
driver.find_element_by_class_name("kw")                #标签属性class name定位
driver.find_element_by_tag_name("input")                #标签名定位
driver.find_element_by_link_text("地图")                #标签<a>文本定位
driver.find_element_by_pritial_link_text("地")        #link text定位补充
driver.find_element_by_css_selector(".kw")             #css selector定位
driver.find_element_by_xpath("//input[@id='kw']")      #xpath定位

#使用by类定位
from seleium.webdriver.common.by import By
driver.find_element(By.ID,'KW')

(1)css selector定位

选择器例子例子描述
.class.intro选择class="intro"的所有元素
#id#kw选择的id="kw"所有元素
element>elementdiv>p选择<div>元素的所有<p>子元素
element elementdiv p选择<div>元素内部的所有<p>子元素
element+elementdiv+p选择同一级中紧接在<div>元素之后的所有<p>元素
[attribute^=value]a[src^="https"]选择属性src以“https”开头的<a>元素
[attribute$=value]a[src$=".pdf"]选择属性src以“.pdf”结尾的<a>元素
[attribute*=value]a[src*="abc"]选择属性src包含“abc”的<a>元素
:nth-childinput:nth-child(1)选择其父元素中的第一个子元素,如果第一个子元素不为input,则结果为0
:nth-child(1)选择父级元素中的第一个子元素
:nth-of-typeinput:nth-of-type(1)选择父元素中的第一个input子元素

 (2)Xpath定位

xpath可以使用相对定位和绝对定位,绝对定位的定位方法是以“/”开头,相对定位是以“//”开头

#例如:
driver.find_element_by_xpath("/html/body/div[2]/div/div/form/span/input")    #绝对定位
driver.find_element_by_xpath("//input[@id="kw"]")    #相对定位

使用逻辑运算符

driver.find_element_by_xpath("//input[@name='wd' and @class='s_ipt']")

使用contains模糊匹配

driver.find_element_by_xpath("//a[contains(@class,'bg')")
driver.find_element_by_xpath("//a[contains(@text(),'新闻')")
driver.find_element_by_xpath("//a[text()=''新闻]")

text()方法用于标识HTML中的文本。

(3)By类定位

八种定位方式对照表

idBy.ID
nameBy.NAME
class_nameBy.CLASS_NAME
tag_nameBy.TAG_NAME
link_textBy.LINK_TEXT
partrial_link_textBy.PARTRIAL_LINK_TEXT
css_selectorBy.CSS_SELECTOR
xpathBy.XAPTH

5、切换窗口

handles=driver.window_handles            #获取全部窗口
new_handle=driver.current_window_handle    #获取当前窗口
for handle in handles:            #遍历循环所有窗口
    if handle != new_handle:        #判定是否当前窗口一致
        driver.switch_to.window(handle)    #不是就进行切换
        break                              #结束循环

6、切换内嵌框架frame

driver.switch_to.frame(1)      #通过idexd定位,起始为0
driver.switch_to.frame("kw")    #通过id定位
driver.switch_to.frame("kd")    #通过name定位
driver.switch_to.frame(driver.find_element_by_id('kw'))    #通过元素对象定位
driver.switch_to.default_content()  #回到主文档
driver.switch_to.parent_frame()  #回到上一层

注意: 切换框架,只能切换到父级再到子级,不能直接到孙级

7、下拉框标签select、option

from selenium.webdriver.support import Select    #引入Select类
locator=driver.find_element_by_id("source")       #定位select元素
select=Select(locator)        #实例化类赋值
select.select_by_visible_text("网络")    #通过可见文本赋值
select.select_by_value(“网络”)    #通过value属性赋值
select.select_by_index(0)    #通过索引赋值

8、弹窗处理

from selenium.webdriver.common.alert import Alert    #引入类Alert
alter=Alert(driver)        #实例化类
alter.accept()            #确认警告框
alter.dismiss()            #取消警告框
alter.send_keys()        #输入值

9、javascript调用

(1)窗口滚动

from seleium import WebDriver

xy=driver.find_element_by_tag_name("html").size #获取页面的尺寸
js="window.scroll(0,num)”" #实现窗口滚动,num可以通过上述xy获取
driver.excute_script(js)    #执行js语句

(2)js的几种定位方式 

js="document.getElementById()"    #根据id定位元素
js="document.getElementsByName()"    #根据name定位元素
js="document.getElementsTagName()"    #根据tag name定位元素
js="document.getElementsClassName()"    #根据class name定位元素
driver.excute_script(js)    #执行js语句

(3)js的几种对元素操作方法

# 使用 JavaScript 定位元素和操作
js="document.getElementById('kw').removeAttribute(‘readonly’)"    #去掉属性readonly属性
js="document.getElementById('kw').setAttribute('name','kd')"    #添加name属性
js="document.getElementById('kw').click()"    #点击元素
js="document.getElementById('kw').value='刘德华'"    #修改属性值
driver.excute_script(js)    #执行js语句

# 使用 selenium定位元素,JavaScript 操作元素,一般用于不可见元素
element = driver.find_element(By.ID, "hidden_element_id")
driver.execute_script("arguments[0].click();", element)

注意:使用 javascript语句最后需要加上execute_script方法

10、设置等待

(1)强制等待

from time import sleep    #引入sleep
sleep(3)    睡眠3秒

(2)隐式等待

driver.implicitly_wait(30)     #一般在打开浏览器后就使用,等待30秒

(3)显示等待

from selenium.webdriver.support.ui import WebDriverWait   #引入WebDriverWait

from selenium.webdriver.support import export_conditions as EC    #引入EC

wait= WebDriverWait(driver,10,1)     #实例化WebDriverWait,总等待时间10秒,间隔刷新等待时间1秒

wait.until(EC.presence_of_element_located(By.ID,"kw"))    #等待id="kw"的元素出现

11、截图

driver.save_screenshot(".\abc.png") #截当前页面的图,可以使用相对路径绝对路径
driver.get_screenshot_as_file("c:\\abc.png")    #截长图,也可以使用相对路径和绝对路径

12、鼠标事件

from seleium.webdriver.common.action_chains import ActionChains
from seleium.webdriver.common.by import By

locator=driver.find_element(By.ID,"kw")
action=ActionChains(driver)    #实例化类
action.move_to_element(location).perform()    #鼠标悬停

 场景鼠标事件

context_click(locator)鼠标右键单击
double_click(locator)左键双击
drag_and_drop(source_locator,target_locator)鼠标拖动,从source_locator拖到target_locator
move_to_element(locator)鼠标悬停
click_and_hold(locator)按下鼠标左键

13、键盘操作

from seleium.webdriver.common.keys import Keys
from seleium.webdriver.common.by import By

driver.find_element(By.ID,"kw").send_keys(Keys.BACK_SPACE) #发送删除键(BackSpace)

其它常用键盘事件

Keys值含义
send_keys(Keys,BACK_SPACE)删除键(BackSpace)
send_keys(Keys,SPACE)空格键
send_keys(Keys,TAB)Tab键
send_keys(Keys,ESCAPEE)ESC键
send_keys(Keys,ENTER)回车键
send_keys(Keys.CONTROL,"a")Ctrl+A全选
send_keys(Keys.CONTROL,"c")Ctrl+C复制
send_keys(Keys.CONTROL,"x")Ctrl+X剪贴
send_keys(Keys.CONTROL,"v")Ctrl+V粘贴
send_keys(Keys,F1)F1~F12
send_keys(Keys,F12)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值