一、selenium的介绍

Selenium是一个流行的主动化测验东西,用于测验Web应用程序的功用和用户界面。它能够模拟用户在浏览器中的操作,如点击、输入文本、挑选下拉框等,以及验证页面元素的状况和特点。Selenium能够协助测验人员主动履行重复的测验使命,提高测验功率并削减人工错误。

二、selenium的原理

简单入门seleniumUI自动化测试

在咱们的主动化程序中,咱们需求导入selenium库中的WebDriver类来创立一个WebDriver目标,经过调用selenium客户端库相应的函数发送恳求给浏览器驱动(如ChromeDriver)。

当咱们运用WebDriver驱动程序履行代码时,WebDriver会将咱们的指令转化为HTTP恳求,并将其发送给浏览器驱动程序。

浏览器驱动是衔接Selenium库和浏览器的桥梁,它担任与浏览器进行通讯,并履行咱们编写的代码来控制和操作浏览器。

浏览器驱动程序接收到这些HTTP恳求后,会将其转化为浏览器可履行的指令,并将指令发送给浏览器进行履行。履行完成后,浏览器将成果回来给浏览器驱动程序,再由浏览器驱动程序将成果转化为HTTP响应,并将其回来给咱们的代码程序。

三、selenium的八种元素定位的办法

selenium完成UI主动化的要害就在于元素定位,可谓,只要定位了元素就能够调用办法对UI元素进行控制。在介绍元素定位的办法前,咱们需求先知道咱们定位的代码写得对不对,此刻F12的强大之处就体现出来了!

能够把开发者东西调出来,挑选Elements,随意点击一个元素,然后点击Ctrl+F,在此查找框能够查找到当时页面的一切元素,再把咱们定位元素的代码复制进行查找,若查找成果能定位到元素,则证明定位元素的办法写对了。

简单入门seleniumUI自动化测试

在selenium中,有八种元素定位的办法,下面将进行介绍。

1、ID定位:

find_element(By.ID, 'Id特点值')

举例:

简单入门seleniumUI自动化测试

id特点值为kw,则代码为find_element(By.ID, 'kw')

在 CSS 中,id是用于标识网页元素的一种重要特点而且id是仅有的,因此,若定位的元素存在id值的话,经过ID定位是一个十分快捷的办法。

2 、name定位:

find_element(By.NAME,'name特点值')

举例:

简单入门seleniumUI自动化测试

name特点值为referrer,则代码为find_element(By.NAME,'referrer)

3、class定位:

find_element(By.CLASS_NAME,'class特点值')

举例:

简单入门seleniumUI自动化测试

class特点值为foot-async-script,则代码为find_element(By.CLASS_NAME,'foot-async-script')

当class特点值有多个时,能够指定恣意一个class 特点值,都能够挑选到这个元素

4、tag定位:

find_element(By.TAG_NAME,'元素的标签值')

举例:

简单入门seleniumUI自动化测试

标签值为style,则代码为find_element(By.TAG_NAME,'style')

由于定位到的元素不仅有,所以咱们能够运用find_elements(By.TAG_NAME,'style') ,注意find_element和find_elements的差异,find_elements回来的是一个列表

5、link_text定位:

find_element(By.LINK_TEXT,'超链接文字')

举例:

简单入门seleniumUI自动化测试

如百度主页的视频则为超链接文字,代码可写为find_element(By.LINK_TEXT, '视频')

6、partial_link_text定位:

find_element(By.PARTIAL_LINK_TEXT,'超链接部分文字')

举例,

简单入门seleniumUI自动化测试

如超链接文字太长,也能够只输入部分,也能定位到元素, 如图上的“百度一下,你就知道-移动主页”特点值可写为:移动主页,代码:find_element(By.PARTIAL_LINK_TEXT, '移动主页')即可定位到元素

7、css定位:

find_element(By.CSS_SELECTOR,'css值')

更多的时分,元素是没有id、class值的,或许特点值不仅有,此刻咱们能够用CSS selector语法来挑选元素,CSS挑选器是Web开发中常用的一种定位元素的办法,能够在HTML文档中快速精确地找到所需的元素。

(1)经过标签名tag挑选元素

例如div,p,a等标签,例如,找出一切标签名为div的元素

find_elements(By.CSS_SELECTOR, 'div')

(2)经过类名class挑选元素

语法为在class值前加一个.号,

举例:

简单入门seleniumUI自动化测试

代码为:find_element(By.CSS_SELECTOR, '.foot-async-script')

(3)经过ID挑选元素

语法为在id值前加一个#号,

举例:

简单入门seleniumUI自动化测试

代码为:find_element(By.CSS_SELECTOR, '#result_tts_player')

(4)经过特点来挑选元素

语法为[特点名=特点值]

举例:

简单入门seleniumUI自动化测试

代码为:find_element(By.CSS_SELECTOR, '[name=theme-color]') 也能够与标签名、id值或许类名组合运用 如find_element(By.CSS_SELECTOR, 'meta[name=theme-color]')

(5)经过子元从来挑选

语法:元素1 > 元素2

若元素2在元素里边,如:

简单入门seleniumUI自动化测试

类特点wgt-navbar是类特点navbar-wrapper层级下的,则能够经过子元素语法来更精确的定位元素,代码为:find_element(By.CSS_SELECTOR, '.navbar-wrapper > .wgt-navbar)

(6)经过子孙元从来挑选

语法:元素1 元素2

与子元素相同,子孙元素也是在元素里边;不同的是,子元素只能是元素的直接子元素,而子孙元素能够不是直接子元素,子元素一定是子孙元素,子孙元素纷歧定是子元素

比如元素a > 元素b > 元素c > 元素d,元素b是元素a的子元素,元素c是元素b的子元素但不是a的子元素,元素c是元素a的子孙元素。

举例:

简单入门seleniumUI自动化测试

类特点navbar-bg是类特点wgt-navbar层级下的,而wgt-navbar是navbar-wrapper的子元素,则navbar-bg是navbar-wrapper的子孙元素。 则能够经过子孙元素语法来更精确的定位元素,代码为:find_element(By.CSS_SELECTOR, '.navbar-wrapper .navbar-bg)

8、Xpath定位

XPath定位的优点是灵敏且功用强大,能够依据元素的特点、标签名、层级联系、文本内容等多个特征进行定位。在某些状况下,XPath定位或许更适合定位杂乱的元素结构或特殊的元素。然而,XPath表达式相对于CSS挑选器来说更杂乱一些,有时或许会更加冗长。因此,在实际运用中,能够依据具体的状况挑选运用CSS挑选器仍是XPath定位来定位元素。

XPath定位办法能够分为绝对途径和相对途径两种办法。

(1)绝对途径定位:

绝对途径是从根节点开端,经过一系列的节点途径来定位元素。绝对途径以斜杠/最初,表明根节点,然后按照节点层级联系逐级定位。例如,/html/body/div[1]/input表明从根节点开端,先挑选html元素,然后挑选body元素,再挑选第一个div元素,最终挑选其中的input元素。

(2)相对途径定位:

相对途径是相对于当时节点的途径,更常用且灵敏。相对途径以双斜杠//最初,表明从当时节点的恣意方位开端,挑选契合条件的元素。例如,//input表明挑选文档中一切的input元素,不管其在文档中的方位。下面介绍下如何依据元素的特点、标签名、层级联系、文本内容等特征进行定位。

//tagname: 挑选一切具有指定标签名的元素

//tagname[@attribute=’value’]: 挑选具有指定特点和特点值的元素。

//* [@attribute=’value’]: 挑选具有指定特点和特点值的恣意元素

//parent/child: 挑选父元素下的直接子元素。

//ancestor/descendant: 挑选ancestor元素下的一切descendant元素。

//* [text()=’value’]: 挑选具有指定文本内容的恣意元素。

XPath定位办法也支持运用逻辑运算符和多个条件进行定位。例如,能够运用and、or、not来组合多个条件。

四、selenium的常用元素操作

click(): 单击元素。

send_keys(value):输入框元素发送文本。

clear(): 清空输入框元素的文本。

get_attribute(name): 获取元素的指定特点值。

is_displayed(): 判别元素是否可见。

is_enabled(): 判别元素是否可用。

is_selected(): 判别元素是否被选中。

五、实例

需求: 从百度查找进入微博,然后获取微博热搜数据并输出到txt文档中

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class test(object):
   def __init__(self):
       self.driver = webdriver.Chrome()
       self.driver.get('https://www.baidu.com/')
       #self.driver.get('https://weibo.com/')
       self.driver.implicitly_wait(10)      #`全局等候`该办法接受一个参数, 用来指定最大等候时长
       self.driver.maximize_window()        #最大化浏览器页面
   def baidu_search(self):
       self.driver.find_element(By.ID,'kw').send_keys('微博')   #经过id值定位
       self.driver.find_element(By.CSS_SELECTOR,"[value=百度一下]").click() #经过CSS挑选器定位
       self.driver.find_element(By.PARTIAL_LINK_TEXT,'微博-随时随地发现新鲜事').click()  #经过超链接定位
       for handle in self.driver.window_handles:   #不断切换窗口至咱们想要的窗口:Sina
           # 先切换到该窗口
           self.driver.switch_to.window(handle)  
           # 得到该窗口的标题栏字符串,判别是不是咱们要操作的那个窗口
           if 'Sina' in self.driver.title:
               # 如果是,那么这时分WebDriver目标便是对应的该该窗口,正好,跳出循环,
               break
   def get_weibo_hot_search(self):
       time.sleep(10)
       hot_search_list = self.driver.find_elements(By.XPATH, '//*[@class="wbpro-textcut f14 cla"]')
       print(len(hot_search_list))
       print(hot_search_list)
       for list in hot_search_list:
           hot_search_text=list.text
           self.save_data(hot_search_text)
   def save_data(self, hot_search_text):
           with open(r'C:\Users\User\Desktop\output.txt', 'a', encoding='utf-8', newline='') as f:  # 用追加的办法将数据保存到txt文件中
              # for number,hot_search_text in hot_search.items():
               f.write(hot_search_text+'\n')
   def main(self):
       self.baidu_search()
       self.get_weibo_hot_search()
       self.driver.quit()
if __name__ == '__main__':
   ceshi = test()		# 实例化目标
   ceshi.main()		# 调用类函数入口