0


WEB自动化测试第一讲—selenium入门操作

一、安装Chrome驱动

selenium提供可以进行多个驱动,注意,不是国内的驱动,国内浏览器是不认可的,是世界公认的浏览器才可以使用驱动,如:chrome,Edge,Firefox,Safari

这里咋们进行Chrome驱动下载,注意:驱动版本要与你的chrome浏览器版本一致

官方网址:https://sites.google.com/a/chromium.org/chromedriver/downloads

但是一般情况下官方的驱动版本很低,可以使用下方的驱动:Chrome for Testing availability (googlechromelabs.github.io)

下载完成之后放入到你的python路径中

二、selenium

一、Chrome驱动实例化

可以理解为打开浏览器,创建了一个浏览器对象,以chrome浏览器为例:

from selenium import webdriver

# 谷歌驱动初始化
Chrome = webdriver.Chrome()

二、窗口最大化

在进行浏览器使用时,可以将窗口最大化,因为在进行使用浏览器对象Chrome时打开的浏览器不是最大化的窗口,窗口最大化是因为在后续进行元素定位是确保所有元素能加载出来,不会出现元素加载不出来,定位不到现象,使用的是maximize_window()方法

from selenium import webdriver

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()

三、浏览器输入网址

使用get方法可以往浏览器输入网址,例如:打开百度

import time

from selenium import webdriver

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")

四、浏览器如何查找元素

如何查看浏览器的元素进行定位呢,使用F12或者右键打开开发者选项,找到Elements,点击左上角的小箭头,选中之后选择需要定位的地方就可以找到对应的元素,后续在selenium中使用相应的定位方式进行定位

五、selenium查找元素方法

一、查看一个元素

使用find_element来查找一个元素,可以直接进行点击、输入等操作

from selenium import webdriver
import time

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
time.sleep(5)
#find_element 查找一个元素
Chrome.find_element(‘定位方式’, '元素')

二、查看一组元素

使用find_elements来查找一组元素,输出的是一个列表,所以遍历的话使用索引的话与列表一直从0开始


from selenium import webdriver

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
time.sleep(5)
#find_elements 获取一组元素
Chrome.find_elements(定位方式, 元素)

六、八大定位方式

使用定位需要用到By方法

一、ID 定位

通过ID属性进行定位,以百度为例,定位输入框,查找到的百度输入框id='kw',那么使用代码如下

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
time.sleep(5)
#使用ID进行定位
Chrome.find_element(By.ID, 'kw')

二、NAME 定位

通过Name属性进行定位,以百度为例,定位输入框

查找到的百度输入框按name属性看的话是name = 'wd',代码如下:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
#添加等待等待页面加载完成,元素全部展示出来
time.sleep(5)
#使用NAME进行定位
Chrome.find_element(By.NAME, 'wd')

三、CLASS_NAME 定位

通过CLASS属性进行定位,以百度为例,定位输入框

查找到的百度输入框按CLASS属性看的话是class="s_ipt",代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)
# 使用CLASS_NAME 定位
Chrome.find_element(By.CLASS_NAME, 's_ipt')

四、CSS_SELECTOR 定位

使用css进行定位,

CSS详解:如何使用css进行定位
标签名开头
input
# 使用id定位
# 后面加id元素 id='kw'
#kw
通过class类名定位
# .后面加class的元素值,class='s_pi'
.s_pi
[]内部放属性
# []放入属性值 name='11'
[name='11']
通过属性前缀定位
# 属性 attribute 的值以 value 开头的元素
[attribute^=value]
通过属性包含定位
属性 attribute 的值包含 value 的元素
[attribute*=value]
通过子元素定位
# parent 下的直接子元素 child
parent > child
冒号,通过伪类进行定位
#作为其父元素的第 n 个子元素的元素。
:nth-child(n)
selenium中使用

以百度输入框为例,输入#kw定位

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)、
# 使用CSS_SELECTOR 定位
Chrome.find_element(By.CSS_SELECTOR, '#kw')

五、TAG_NAME定位

使用标签进行定位,以百度输入框为例,定位到input,但是如何当前页面存在多个input标签,会定位错误。不要推荐使用。

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)
#使用TAG_NAME 标签定位
Chrome.find_element(By.TAG_NAME, 'input')

六、LINK_TEXT 定位

LINK_TEXT为超链接文本定位,只能用于超链接,以百度页面上的热点话题为例。

LINK_TEXT是只有文本全部都一样才可以定位到,可能存在定位不到,这个时候可以使用PARTIAL_LINK_TEXT定位方式

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)
#使用LINK_TEXT 定位
Chrome.find_element(By.LINK_TEXT, '男子伤害妻女和外孙 已自杀身亡”')

七、PARTIAL_LINK_TEXT定位

PARTIAL_LINK_TEXT为部分超链接文本定位,只能用于超链接,与LINK_TEXT的去别在于,只要写一部分超链接文本就可以定位成功,有点模糊定位的意思。以百度为例,

如何使用LINK_TEXT进行定位会定位不到了,因为打印是时候会打印出来前面的序列号或者后面的热字,所以用PARTIAL_LINK_TEXT就可以定位到。

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)
#使用PARTIAL_LINK_TEXT 定位
Chrome.find_element(By.PARTIAL_LINK_TEXT, '男子伤害妻女和外孙 已自杀身亡”')

八、XPATH 定位(万能)

XPath(XML Path Language)是一种用于在 XML 文档中定位节点的语言,属于万能定位。

以//开头,//是过滤后面加标签,[@属性=‘属性值’]之后a/b,b为a的子级。以百度的输入框为例

可以直接定位到//input[@id='kw'],意思是id的属性值为kw的input标签

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)
# XPATH 定位
Chrome.find_element(By.XPATH, '//input[@id="kw"]')

也可以定位为//form[@id="form"]/span[1]/input,代码如下

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开百度页面
Chrome.get("https://www.baidu.com/")
# 等待页面加载完成
time.sleep(5)
# XPATH 定位
Chrome.find_element(By.XPATH, '//form[@id="form"]/span[1]/input')

七、对元素进行操作

一、点击:click()

使用click方法进行模拟用户点击,代码如下

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开页面
Chrome.get("网址")
# 等待页面加载完成
time.sleep(5)
# 查找到元素之后进行点击,点击按钮
Chrome.find_element(By.XPATH, '元素').click()

二、输入:send_keys()

使用send_keys()进行输入框输入,代码如下

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开页面
Chrome.get("网址")
# 等待页面加载完成
time.sleep(5)
#send_keys 进行输入框输入
Chrome.find_element(By.XPATH, '元素').send_keys('想要输入的值')

八、三种 等待方式

一、time模块

time.sleep(5)固定等待,到不时间不会执行之后的代码

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 等待页面加载完成,等待五秒
time.sleep(5)
print('五秒之后输出')

隐式等待:implicitly_wait()

implicitly_wait()是Selenium WebDriver 提供的一种等待机制,作用域是全局,它设置了一个全局的等待时间,WebDriver 在查找元素时会等待指定的时间。如果在指定时间内找到了元素,立即继续执行;如果在指定时间内没有找到元素,则抛出

NoSuchElementException

。代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 等待页面加载完成
Chrome.implicitly_wait(5)
# 五秒内查找元素是否存在,存在就继续执行,不存在就抛出错误
Chrome.find_element(By.XPATH, '元素')

显示等待:WebDriverWait

用于在特定条件满足之前暂停代码执行。与

implicitly_wait

不同,

WebDriverWait

允许你指定等待的条件,并在条件满足时立即继续执行,而不是等待固定的时间。

使用方法:WebDriverWait

通常与

expected_conditions

模块一起使用,以便等待某些条件(如元素可见、元素可点击等)满足,针对单一元素。代码如下:

WebDriverWait中的driver为浏览器驱动,timeout为超时时间,poll_frequency为多长时间查找一次,默认是0.5秒查询一次

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# 谷歌驱动初始化
Chrome = webdriver.Chrome()
# 窗口最大化
Chrome.maximize_window()
# 打开页面
Chrome.get("网址")
# 等待页面加载完成
Chrome.implicitly_wait(5)
#在10秒内每两秒轮询查看一次看元素是否可以点击
element = WebDriverWait(driver=Chrome,timeout=10,poll_frequency=2).until(EC.element_to_be_clickable((By.XPATH,'元素')))
# 元素查找都按之后进行后续操作
element.click()
# 关闭浏览器
Chrome.quit()

九、浏览器关闭

selenium提供了两中关闭浏览器的方法,quit()和close(),默认是quit()

一、quit()

定义:quit()

方法关闭所有与 WebDriver 会话相关的浏览器窗口,并终止 WebDriver 会话

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("网址")
# 执行一些操作
driver.quit()  # 关闭所有浏览器窗口并终止 WebDriver 会话,将驱动关闭

二、close()

定义:

close()

方法仅关闭当前的浏览器窗口,但不会终止 WebDriver 会话

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("网址")
# 关闭当前窗口
driver.close() #关闭当前窗口,如果存在多个窗口,需要切换窗口权柄,不会关闭浏览器驱动
标签: 自动化

本文转载自: https://blog.csdn.net/weixin_47296253/article/details/140285829
版权归原作者 飞翔的小飞象 所有, 如有侵权,请联系我们删除。

“WEB自动化测试第一讲—selenium入门操作”的评论:

还没有评论