2023年11月25日发(作者:)

1.⾃动化测试+selenium+⼋⼤定位元素

1.⾃动化测试简介

1.1 什么是⾃动化测试

⾃动化测试就是把以⼈为驱动转化为 机器执⾏的过程。⽬的是将过于繁杂的固定的⼿⼯测试⾏为转化为⾃动化执⾏,从⽽有更多的时间来

⾛⼿⼯测试。

⾃动化功能测试:测开。⽬前主流技术:Selenium

⾃动化性能测试:性能测试

⾃动化测试可以实现:

#webdriver

导⼊

from selenium import webdriver

#from ver import WebDriver

#

创建⼀个浏览器对象

driver=webdriver.Chrome()

#wb=WebDriver(executable_path="chromedriver")

#URL

浏览器访问指定

driver.get('')

元素的定位,输⼊⽂本,并点击

元素定位就是通过元素的信息或元素层级结构来定位元素的

定位元素依赖于1,标签名2,属性3,层级4,路径

#webdriver

导⼊

from selenium import webdriver

from selenium.webdriver.chrome.webdriver import WebDriver

from selenium.webdriver.common.by import By

#

创建⼀个浏览器对象

wb=WebDriver(executable_path="chromedriver")

#URL

浏览器访问指定

wb.execute('get',{'url':''})

#webElement,

元素的定位,先获取然后在考虑元素如何操作?

el=wb.execute('findElement',{

'using':By.XPATH,

'value':'//input[@id="kw"]'

})['value']

el._execute('sendKeysToElement',{'text':'刘阳',

'value':''})

el1=wb.execute('findElement',{

'using':By.XPATH,

'value':'//input[@id="su"]'

})['value']

el1._execute('clickElement')

''

⾃动化中的hello world

'''

#WebDriver

导⼊模块

from selenium import webdriver

#

导⼊强制等待

from time import sleep

#chrome

创建浏览器对象

driver=webdriver.Chrome()

#url

访问指定

driver.get('')

#

查找需要操作的元素

we_input=driver.find_element_by_id("kw")

#

对元素进⾏输⼊操作

we_input.send_keys('刘阳')

#

点击百度⼀下按钮,执⾏本次搜索操作

we_button=driver.find_element_by_id('su')

we_button.click()

#WebDriver

是⼀个服务端代理,当⾃动化结束时,需要记得释放资源

sleep(5)

driver.quit()

如何访问指定的URL?

Webdriver是浏览器驱动的服务端。Webdriver封装了execute()⽅法,execute()发送请求

实例:实战商城实现登录操作

完成上述按钮的步骤:

1. 导包 from selenium import webdriver from time import sleep

2. 获取浏览器对象 driver=()

3. 打开url:()

4. 获取⽂本框 _element_by_id()

5. 输⼊⽂本内容:_key()

6. 获取按钮属性位置

7. 点击按钮

8. 暂停⼏秒 sleep()

9. 关闭驱动 ()

close与quit的区别:close:关闭当前浏览页;quit:关闭浏览器,释放进程

报错:element not interactable 定位的元素⽆法进⾏交互

#we_()

为实现该功能,报错

from selenium import webdriver

#

导⼊强制等待

from time import sleep

from selenium.webdriver.chrome.webdriver import WebDriver

from selenium.webdriver.common.by import By

#chrome

创建浏览器对象

driver=webdriver.Chrome()

#url

访问指定

driver.get('39.98.138.157/shopxo/')

#('39.98.138.157/shopxo/?s=/index/user/')

# #

查找需要操作的元素

# we_input=_element_by_id("search-input")

#

#

we_button1=driver.find_element_by_xpath('39.98.138.157/shopxo/?s=/index/user/')

we_button1.click()

#

输⼊⽤户名、密码

we_input=driver.find_element_by_name('accounts')

we_input.send_keys('666666')

we_input=driver.find_element_by_name('pwd')

we_input.send_keys('111111')

#

点击登录按钮

we_button=driver.find_element_by_class_name('am-btn am-btn-primary am-radius am-btn-sm btn-loading-example')

we_button.click()

修改为正确代码:

from selenium import webdriver

#

导⼊强制等待

from time import sleep

#chrome

创建浏览器对象

driver=webdriver.Chrome()

#url

访问指定

#""python(url)rr

注意:反斜杠是中的转义字符本地地址时,可能会遇到,解决⽅法:前⾯加是⼀个修饰的字符串,如果字符串有转义字符,不进⾏转义使⽤

)或者即可

""

#file:///

使⽤本地浏览模式,前缀必须加

#file:///D:/study//jsp/jsp//

⼤⼆第⼀学期课后练习题刘阳

driver.get('39.98.138.157/shopxo/')

#

查找需要操作的元素,该模块需要完成⽤户登录的模拟,休要点击登录输⼊⽤户名、密码,再次点击登录实现登陆成功

driver.find_element_by_link_text('登录').click()

sleep(5)

#

输⼊⽤户名、密码

we_input=driver.find_element_by_name('accounts')

we_input.send_keys('666666')

we_input=driver.find_element_by_name('pwd')

we_input.send_keys('111111')

sleep(5)

#

点击登录按钮

web_button=driver.find_element_by_link_text('登录').click()

#WebDriver

是⼀个服务端代理,当⾃动化结束时,需要记得释放资源

sleep(10)

driver.quit()

3.⼋⼤元素定位

所有的UI层的⾃动化都是基于元素定位来实现的,所有的被操作原⾊,都是webElement对象

元素=html便签

超链接:img/a/input/button/

通⽤:div/li/span/…

实际的系统中,元素的标签不是由表象来决定的,是通过css样式表来决定的

⾃动化时,就是基于标签的属性来定位标签

如何精准定位到需要操作的元素:

⼋⼤元素定位

查找单个元素:

{

(id,name,class_name【使⽤元素的class属性的定位】:属性定

(tag_name:【标签名称<标签名 xxx/>】标签定位) (link_text,partial_link_text[模糊查询]:定位a标签)

(xpath【基于元素路径定位】,css【基于元素选择器定位】:功能强⼤)

}

#基于id定位 (driver.)

查找单个元素⽅法执⾏记录

**find_element_by_name√基于name定位 基于元素属性中的name值来进⾏定位 name类似于⾝份证上的名字,有可能重名

**find_element_by_id√基于元素属性中的id值来进⾏定位 id类似于⾝份证号,不出意外,不会重复

find_element_by_link_text√基于link text定位 主要⽤于超链接进⾏定位 _element_by_link_text(‘注册’).click()

查找单个元素⽅法执⾏记录

**find_element_by_xpath径:从html根路径下⼀层⼀层往下数,找到对应的层级,从⽽找到元素(绝境) 相对路径:基于匹配制度查看元素。

⽬前应⽤最多的⼀种⾏为,基于页⾯结构来进⾏的定位 -嵌套关系,直接在源⽂件中copy xpath内容即可 绝对路

依据xpath结构来⾛

find_element_by_partial_link_text基于partial link text:link text的模糊查询版本,类似于数据库中的link %

find_element_by_tag_name通常使⽤elements <标签名 /> 不⽅便定位 。如果存在多个相同标签,则返回符合条件的第⼀个标签

find_element_by_class_name基于classname定位 不建议使⽤,有空格的情况下,会出现查询不到的情况

find_element_by_css_selector应⽤相对较多的⼀种⾏为,最初IE浏览器不⽀持xpath.万群基于class属性来实现的定位

⼀:为什么要使⽤xpath,css定位呢?

1. id,name,class_name:依赖于元素三个对应的属性,如果元素么有以上三个属性,则定位失败

2. link_text,partial_link_text:只能定位超链接

3. tag_name:只能查找页⾯唯⼀元素,或页⾯中多个相同元素的第⼀个元素

⼆:确认xpath路径是否正确?

1. 在开发者⼯具elements页⾯使⽤ctrl+f查找,进⾏判断

2. 在console中输⼊$x()进⾏校验

如果要基于text来定位元素,在[]中添加text()=‘⽂本内容’来进⾏查找。例如://a[text()=‘登录’]

三:xpath定位策略(⽅式)

1. 路径-定位:绝对: 以单斜杠开头,逐级开始编写(不可跳级。如/html/boby/div/p[1]/input)相对:以//开头,//后跟元素名称,不知

元素名称可以使⽤

代替 如//input,//

2. 利⽤元素属性-定位:在xpath中,所有的属性必须使⽤@符号修饰。如://*[@id=‘id值’]

3. 属性与逻辑结合-定位://*[@id=‘id值’ and @属性=‘属性值’]

4. 层级与属性结合-定位://*[@id=‘⽗级id属性值’]/⼦集元素(input)

提⽰:

⼀般使⽤指定标签名称,不建议使⽤*代替,⽐较慢

find_elements_by_xpath

查找多个元素⽅法执⾏记录

find_elements_by_link_text多个”百度“元素,通过下标来进⾏定位 list列表,0,1,2,3…

标签名进⾏定位,重复度最⾼,只有在需要定位后进⾏⼆次筛选dr=_elements_by_tag_name(‘a’)for

d in dr: if ==‘登录’:()-

find_elements_by_class_name

find_elements_by_css_selector

find_elements_by_tag_name

两个私有⽅法

两个私有⽅法执⾏记录

find_element

find_elements

css定位常⽤策略:

1. id选择器:根据元素id属性来选择:#id

2. class选择器:根据元素class属性来选择:.class

3. 元素选择器;根据元素的标签名选择: a

4. 属性选择器: [action="/s"]

5. 层级选择器:p>a

from selenium import webdriver

from time import sleep

driver=webdriver.Chrome()

driver.get("")

driver.find_element_by_id("kw").send_keys("菜鸟教程")#id

唯⼀

driver.find_element_by_name("wd").send_keys("菜鸟教程")#name

可重名

driver.find_element_by_class_name("s_ipt").send_keys("菜鸟教程")#class_name

driver.find_element_by_tag_name("input").send_keys("菜鸟教程")#tag_name:

只返回第⼀个元素

#link_text:a

只能定位标签,定位的内容必须为全部匹配

driver.find_element_by_link_text("新闻").click()# link_text:

点击新闻超链接

#partial_link_text:a

只能定位标签,定位的内容可以是模糊匹配,但需代表唯⼀性

driver.find_element_by_partial_link_text("新闻").click()

driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("hello")#xpath

driver.find_element_by_css_selector("#kw").send_keys("hello")#css id

driver.find_element_by_css_selector('.s_ipt')#css class

driver.find_element_by_css_selector('form')#css

元素

driver.find_element_by_css_selector('[action="/s"]')#css

属性

driver.find_element_by_css_selector('p->a')#css

层级

sleep(3)