selenium环境搭建及基本元素定位方式
Posted 少壮不努力123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium环境搭建及基本元素定位方式相关的知识,希望对你有一定的参考价值。
一、selenium简介
二、selenium的安装与测试
from selenium import webdriver browser=webdriver.Chrome() # # 打开浏览器 browser.get(\'https://baidu.com\') s=browser.find_element_by_id(\'kw\') # 其中kw便是页面中某个元素的id值 print(s)
2.1 设置浏览器驱动
from selenium import webdriver driver = webdriver.Firefox() # Firefox浏览器 driver = webdriver.Chrome() # Chrome浏览器 driver = webdriver.Ie() # Ie浏览器 driver = webdriver.Edge() # Edge浏览器 driver = webdriver.PhantomJS() # PhantomJS()
2.2 Selenium 元素定位
<html> <head> <body link="#0000cc"> <a id="result_logo" href="/" onmousedown="return c(\'fm\':\'tab\',\'tab\':\'logo\')"> <form id="form" class="fm" name="f" action="/s"> <span class="soutu-btn"></span> <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
# 通过 id 定位 dr.find_element_by_id("kw") # 通过name定位: dr.find_element_by_name("wd") # 通过class name定位: dr.find_element_by_class_name("s_ipt") # 通过tag name定位: dr.find_element_by_tag_name("input") # 通过 xpath 定位的几种写法 dr.find_element_by_xpath("//*[@id=\'kw\']") dr.find_element_by_xpath("//*[@name=\'wd\']" )dr.find_element_by_xpath("//input[@class=\'s_ipt\']") dr.find_element_by_xpath("/html/body/form/span/input") dr.find_element_by_xpath("//span[@class=\'soutu-btn\']/input") dr.find_element_by_xpath("//form[@id=\'form\']/span/input") dr.find_element_by_xpath("//input[@id=\'kw\' and @name=\'wd\']") # 通过 css 定位的几种写法 dr.find_element_by_css_selector("#kw") dr.find_element_by_css_selector("[name=wd]") dr.find_element_by_css_selector(".s_ipt") dr.find_element_by_css_selector("html > body > form > span > input") dr.find_element_by_css_selector("span.soutu-btn> input#kw") dr.find_element_by_css_selector("form#form > span > input") # 通过 link_text 定位 dr.find_element_by_link_text("新闻") dr.find_element_by_link_text("hao123") dr.find_element_by_partial_link_text("新") dr.find_element_by_partial_link_text("hao") dr.find_element_by_partial_link_text("123") # 如果是定位一组元素,用下面 find_elements_by_id() find_elements_by_name() find_elements_by_class_name() find_elements_by_tag_name() find_elements_by_link_text() find_elements_by_partial_link_text() find_elements_by_xpath() find_elements_by_css_selector()
三、selenium的使用
所谓模拟浏览器基本就是下面的流程:
请求 显示页面 查找元素 点击可点击元素
1. selenium选择器 要想定位页面的元素,selenium也提供了一系列的方法。 1) 通过标签id属性进行定位 browser.find_element_by_id(\'kw\') # 其中kw便是页面中某个元素的id值 2) 通过标签name属性进行定位 # 两种方式是一样的 browser.find_element_by_name("wd") # 其中wd是页面中某个元素的name值 3) 通过标签名进行定位 browser.find_element_by_tag_name("img") # img参数表示的就是图片标签img 4) 通过CSS查找方式进行定位 browser.find_elements_by_css_selector("#kw") # 根据选择器进行定位查找,其中#kw表示的是id选择器名称是kw的 5) 通过xpath方式定位 browser.find_element_by_xpath(\'//*[@id="kw"]\') # 参数即是xpath的语法 6) 通过搜索页面中链接进行定位 有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link browser.find_element_by_link_text("设置") 通过搜索页面中链接进行定位 ,可以支持模糊匹配** browser.find_element_by_partial_link_text("百度") # 查找页面所有的含有百度的文字链接
selenium+python之元素定位方式介绍
网页自动化测试最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以今天来总结下Selenuim+Python最基本的几种定位方式及实例说明, 以百度搜索输入框为例,用谷歌浏览器具体说明各个定位方式的用法。
1.导入selenium包的webdriver方法
输入 from selenium import webdriver
2.从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠
输入 from time import sleep
3.打开浏览器
(1)获取浏览器驱动,并打开谷歌浏览器,注意浏览器的第一个字母要大写
dr=webdriver.Chrome()
(2)打开被测网页
url = "https://www.baidu.com/"
dr.get(url)
4.元素定位方法
(1)通过id定位----find_element_by_id()
实例:dr.find_element_by_id("kw").send_keys("selenium自动化") #输入搜索关键字
注意点:id值必须是唯一的,id值是动态变化的,则不能使用该方法定位。
(2)通过name定位----find_element_by_name()
实例:dr.find_element_by_name("wd").send_keys("selenium自动化") #输入搜索关键字
注意点:name值也必须是唯一的。
(3)通过class_name定位----find_element_by_class_name()
实例:dr.find_element_by_class_name("s_ipt").send_keys("selenium自动化") #输入搜索关键字
注意点:class_name的值也必须是唯一的。
(4)通过link_text定位----find_element_by_link_text()
实例:dr.find_element_by_link_text("新闻").click()#点击按钮
注意点:link_text的值也必须是唯一的。
(5)通过partial_link_ text模糊文字定位----find_element_by_partial_link_text()
实例:dr.find_element_by_partial_link_text("改革开放").click() #点击按钮
注意点:link_text的值也必须是唯一的。
(6)通过tag_name定位----find_element_by_tag_name()
实例:dr.find_element_by_tag_name("input").send_keys("selenium自动化") #输入搜索关键字
标签名字最容易重复,当定位一组数据时,可使用
inputBoxes = dr.find_elements_by_tag_name("input")
for inputBox in inputBoxes:
if inputBox.get_attribute("maxlength") == "255" and
inputBox.get_attribute("sautocomplete") == ‘off‘:
inputBox.send_keys("selenum自动化")
(7)通过xpath定位,XPath是一种XML文档中定位元素的语言----find_element_by_xpath()
(7.1).根据绝对路径来定位
path1="/html/body/div/div/div/div/div/form/span/input"
dr.find_element_by_xpath(path1).send_keys("selenum自动化") #输入搜索关键字
(7.2).根据元素属性定位
dr.find_element_by_xpath("//input[@autocomplete=‘off‘]").send_keys("selenum自动化")#输入搜索关键字
(7.3).根据通过多个属性组合定位
dr.find_element_by_xpath("//input[@autocomplete=‘off‘ and @id=‘kw‘]").send_keys("selenum自动化")#输入搜索关键字
注意点:括号内的引号和方括号内的引号不能一样。
(7.4).通过层次与属性组合定位
path1 = "//span/input[@class=‘s_ipt‘]"
dr.find_element_by_xpath(path1).send_keys("selenum自动化")#输入搜索关键字
8.通过CSS定位----find_element_by_css_selector()
(8.1).通过class属性
dr.find_element_by_css_selector(".‘s_ipt").send_keys("selenum自动化")#输入搜索关键字
注意点:.号表示通过class属性来定位元素
(8.2).通过id属性定位元素
dr.find_element_by_css_selector("#kw")
注意点:#号表示通过id属性来定位元素
(8.3).通过标签名定位元素
dr.find_element_by_css_selector("input")
(8.4)通过属性定位元素(挺常用的)
dr.find_element_by_css_selector("[name=‘wd‘]")
dr.find_element_by_css_selector("[maxlength=‘255‘]")
属性值包含某个值
属性值包含wd:适用于由空格分隔的属性值。
dr.find_element_by_css_selector("[name~=‘wd‘]")
(8.5)通过层级的父子定位元素
查找有父亲元素的标签名为span,它的所有标签名叫input的子元素
dr.find_element_by_css_selector("span>input")
(8.6)通过层级与属性组合定位
标签名#id属性值:指的是该input标签下id属性为kw的元素
dr.find_element_by_css_selector("input#kw")
标签名.class属性值:指的是该input标签下class属性为s_ipt的元素
dr.find_element_by_css_selector("input.s_ipt")
标签名[属性=’属性值‘]:指的是该input标签下name属性为wd的元素
dr.find_element_by_css_selector("input[name=‘wd‘]")
父元素标签名>标签名.class属性值:指的是span下的input标签下class属性为s_ipt的元素
dr.find_element_by_css_selector("span>input.s_ipt")
9.通过By定位元素
定位的类型包括By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.XPATH,By.CSS_SELECTOR
具体定位方式参考上方1-8的说明。
实例:dr.find_element(By.ID,‘kw‘)
注意:使用By定位方式,需先导入By类。
5.实例登录QQ邮箱
#导入selenium包的webdriver方法
from selenium import webdriver
#导入By类
from selenium.webdriver.common.by import By
#引入sleep函数
from time import sleep
#获取浏览器驱动,并打开浏览器
dr=webdriver.Chrome()
url="https://mail.qq.com/"
dr.get(url)
sleep(2)
#将浏览器窗口最大化
dr.maximize_window()
sleep(2)
#定位表单位置
frame = dr.find_element_by_id(‘login_frame‘)
dr.switch_to.frame(frame)
dr.find_element_by_id(‘switcher_plogin‘).click()
#输入用户名密码,并点击登录按钮
dr.find_element_by_id(‘u‘).send_keys(‘****@qq.com‘)
dr.find_element_by_id(‘p‘).send_keys(‘password‘)
dr.find_element_by_id(‘login_button‘).click()
dr.switch_to_default_content()
以上是关于selenium环境搭建及基本元素定位方式的主要内容,如果未能解决你的问题,请参考以下文章
基于python实现UI自动化3.2 selenium通过JS定位元素
基于python实现UI自动化3.1 selenium通过By定位元素