一、Selenium

Selenium是非常优秀的WEB(UI)自动化测试框架,最小的版本是Selenium4.x。Selenium支持主流的浏览器自动化测试,具体是Chrome,IE,Firefox等浏览器,Selenium也是支持主流的开发语言,如Python,Java,Net,PHP

Selenium=WebDriver+Selenium

二、环境搭建

1、安装Selenium的库,pip3 install selenium

2、安装Chrome浏览器

3、安装Chrome浏览器的驱动

      A、查看Chrome浏览器版本

      B、到淘宝源下载与浏览器版本匹配的Driver

      C、下载成功后进行解压,并且以管理员身份执行

      B、把这个driver放到Python的安装目录下

三、元素定位

webdriver之所以能够操作浏览器,是因为它首先需要定位到被操作的元素属性,然后就可以对浏览器做各种操作

1、单个元素定位

2、多个元素定位,指的是元素的属性都一致,返回的是列表,可以根据列表的索引来定位元素属性

3、不管是单个元素定位还是多个元素定位,目前有8种,分别为:

      ID = “id”    #ID不能是唯一的

      NAME = “name”

      CLASS_NAME = “class name”

      XPATH = “xpath”

      LINK_TEXT = “link text”    #超链接

      PARTIAL_LINK_TEXT = “partial link text”    #也是处理超链接,但是为模糊搜索

      TAG_NAME = “tag name”

      CSS_SELECTOR = “css selector”

简易操作步骤举例:

#从selenium中导入webdriver
from selenium import webdriver  
import time #导入时间的库
driver=webdriver.Chrome()  #对Chrome进行实例化处理
driver.get("http://www.baidu.com")  #导航到百度
time.sleep(4)  #休眠4s
driver.quit()  #退出浏览器

 

1、ID = “id”

ID不能是唯一的

from selenium import  webdriver
import  time

# id元素属性
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")

# send_keys()——输入的意思
driver.find_element_by_id("kw").send_keys("美食 图片")
time.sleep(5)
driver.quit()

 

2、NAME = “name”

# name的元素属性
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_name("wd").send_keys("美食 图片")
time.sleep(5)
driver.quit()

 

3、CLASS_NAME = “class name”

查找class后的内容

# class_name元素属性
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_class_name("s_ipt").send_keys("美食 图片")
time.sleep(4)
driver.quit()

 

4、XPATH = “xpath”

xpath和full xpath区别

当ID为动态参数时,因为每次返回的值不同建议使用full xpath全路径

当使用id,name,class_name都定位不到时,就需要考虑使用css或xpath

 

操作步骤

使用xpath信息时,需要点击input前的三个点,左键选择copy,可以切换xpath,full xpath和selector

# xpath元素属性
from selenium import  webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('美食 图片')
time.sleep(3)
driver.quit()
 
# full xpath元素属性
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('美食 图片')

 

5、CSS_SELECTOR = “css selector”

css和xpath区别

    css 是依据页面的数据样式定位的,有标签选择,类选择,id选择或者他们的交并集, 除此之外没有其他的辅助元素

    xpath 是路径表达式,所有元素和内容都可以成为路径的一部分。

两种定位方式功能基本一致,但是xpath明显更强大,只是xpath写起来较复杂,css写起来容易些

# css元素属性
driver=webdriver.Chrome() driver.get("http://www.baidu.com") driver.find_element_by_css_selector('#kw').send_keys("美食 图片") time.sleep(3) driver.quit()

 

6、LINK_TEXT = “link text” #超链接

PARTIAL_LINK_TEXT = “partial link text”    #也是处理超链接,但是为模糊搜索

# 超链接
from selenium import  webdriver
import  time

driver=webdriver.Chrome()
driver.get("http://www.baidu.com")

# click()——点击的意思
driver.find_element_by_link_text('新闻').click()

#partial link text
driver.find_element_by_partial_link_text('').click()
time.sleep(3)
driver.quit()

 

7、TAG_NAME = “tag name”

通过tag_name元素属性定位,tag_name获取到的是标签,当获取的标签有很多个时,就需要使用多个元素定位的方法

# tagName元素属性
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
# tags=driver.find_element_by_tag_name("input").send_keys("美食 图片")
tags=driver.find_elements_by_tag_name("input")
# print(type(tags))
# for item in tags:
#  print(item)
tags[7].send_keys("美食 图片")
time.sleep(8)
driver.quit()

 

实战——新浪邮箱

from selenium import webdriver
import time

#以新浪邮箱登录为例,通过id元素属性定位:

driver=webdriver.Chrome()
driver.get("https://mail.sina.com.cn/")
driver.find_element_by_id("freename").send_keys("9615")
driver.find_element_by_id("freepassword").send_keys("123456")
time.sleep(3)
driver.find_element_by_link_text("登录").click() 
time.sleep(
3)
driver.quit()

 

四、UI自动化常用操作

1、获取当前测试地址

assert:是Python原生的断言方法

如:a==1,b==1,c==2

那么assert a=b,而assert a=c会出现asserterror错误

from selenium import webdriver
import time
#获取当前测试地址 driver
=webdriver.Chrome() driver.get("https://mail.sina.com.cn/") #current_url获取当前被测试WEB的地址 print(driver.current_url) #assert:是python原生的断言方法 assert driver.current_url.endswith("sina.com.cn/") time.sleep(3) driver.quit()

 

2、获取当前页面代码

from selenium import webdriver
import time

#获取当前页面地址
driver=webdriver.Chrome()
driver.get("https://mail.sina.com.cn/")

#page_source:获取当前页面的代码
print(driver.page_source)
driver.quit()

 

3、获取当前测试WEB的title

from selenium import webdriver
import time

#获取WEB的title
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.title
print(driver.title)
assert driver.title=="百度一下,你就知道"
driver.quit()

 

4、页面的前进与后退

from selenium import webdriver
import time

#页面的前进与后退
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_url)
time.sleep(2)
driver.get("https://mail.sina.com.cn/")
print(driver.current_url)
time.sleep(2)

#页面后退
driver.back()
print(driver.current_url)
time.sleep(2)

#页面前进
driver.forward()
print(driver.current_url)
time.sleep(2)
driver.title
print(driver.title)
driver.quit()

 

5、多窗口解决思路

解决步骤:

 5.1、先打开当前页面

 5.2、获取当前页面放在一个变量中

 5.3、打开新的页面

 5.4、获取所有页面并放在一个变量中

 5.5、循环所有页面,判断出:如果不是当前页面,就是在新的页面

from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.get("https://mail.sina.com.cn/")

#浏览器页面最大化
driver.maximize_window()

# 获取当前页面放在一个变量中
# current_window_handle:获取当前页面
nowHandle=driver.current_window_handle
time.sleep(3#打开新的页面
driver.find_element_by_link_text("注册").click()
time.sleep(2)

#获取所有页面并且放在一个变量中
# window_handles:获取所有页面
allHandle=driver.window_handles
time.sleep(1)

#循环所有页面
for handle in allHandle:

#判断如果不是当前页面,那么就是在新的页面
    if handle!=nowHandle:

#从当前页面切换到新的页面
        driver.switch_to.window(handle)
        driver.find_element_by_name("email").send_keys("asd123")
        time.sleep(2)

#关闭新的页面,但是不关闭程序
        driver.close()

#从新的页面切换到原来的页面
driver.switch_to.window(nowHandle)
time.sleep(1)
driver.find_element_by_id("freename").send_keys("qy12345")
time.sleep(2)
driver.quit()

 

6、清空——clear()

from selenium import webdriver
import time

#clear():清空
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
so=driver.find_element_by_id("kw")
so.send_keys("美食")
time.sleep(2)
so.clear()
time.sleep(2)
driver.quit()

 

7、获取元素属性的值

from selenium import webdriver
import time

#get_attribute()的方法是获取元素属性的值
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
time.sleep(2)
so=driver.find_element_by_id("kw")
time.sleep(1)
so.send_keys("美食")

#我们在输入框中输入的值都是键值中的value
print(so.get_attribute("value"))
time.sleep(3)
driver.quit()

 

版权声明:本文为天啦噜棠梨原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Kaylee/p/16109518.html