selenium--web UI自动化环境配置、元素定位

发布于:2023-01-13 ⋅ 阅读:(613) ⋅ 点赞:(0)

一、自动化介绍

1.1、自动化本质:

        用代码模拟鼠标或键盘对浏览器进行操作

其中包含三个对象:代码,浏览器,浏览器驱动,三者关系:

代码驱动浏览器驱动

浏览器驱动解析代码,并驱动浏览器

浏览器按指令操作

1.2、环境配置:

1.2.1 安装浏览器

检查系统有无浏览器,没有则安装(建议先查看有没有对应的驱动,根据驱动版本下载相应的浏览器)

1.2.2 安装浏览器对应的驱动,并将驱动文件放到python安装目录下

查看浏览器版本,根据浏览器版本下载驱动,将.exe文件放至python安装路径下

1.2.3 安装selenium

ctrl+r -->cmd-->pip install selenium

 1.2.4 检查环境

from selenium import webdriver
driver=webdriver.Chrome()

运行后弹出窗口,打开浏览器则环境配置成功 

 环境配置成功后就可以进行相关操作了。

二、元素定位

2.1 Web页面的元素

1)图片

2)链接

3)文本框

4)按钮

5)下拉列表

6)视频

……

        比如百度的首页,在这张页面上有输入框、按钮和文字链接等,自动化要做的就是模拟鼠标和键盘来操作这些元素,或单击,或输入等。 操作这些元素的前提是要找到它们,如何来找到它们?这就需要用到元素定位的方法来找到相应的元素再进行操作

2.2 元素定位的方法

1)id

2)name

3)class name

4)tag name

5)link text

6)partial link text

7)css selector

8)xpath

 2.2.1 id&name&class name元素定位

ID定位

        HTML规定id属性在HTML文档中必须是唯一的,类似于公民的身份证号,具有很强的 唯一性。WebDriver提供的id定位方法:find_element(By.ID,'id')

Name定位:

        HTML规定name来指定元素名称,因此它的作用更像是人的姓名。name的属性值,在当前 页面中可以不唯一:find_element(By.NAME,'name')

Classname定位:

        HTML规定class来指定元素的类名,通过class属性来定位:find_element(By.CLASS_NAME,'classname')

eg: 

driver.find_element(By.ID,'s-usersetting-top').click()
driver.find_element(By.NAME,'wd').send_keys('python')
driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('selenium')

2.2.2 tag name & link text & partial link text & css selector元素定位

Tag定位:

        HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个 Tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。例如我们打开任意一个页面, 查看前端都会发现大量的<div>、<input>、<a>等tag,所以很难通过tag name去区分不同的 元素。定位方法:find_element(By.TAG_NAME,'tagname')

link text & partial link text定位: 

Link text定位

        是定位标签文本信息的一种方式,使用:find_element (By.LINK_TEXT.'text')

partial link 定位

        是对link定位的一种补充,有些文本链接会比较长,这时候我们可以取文本链接的一部分定位,只要这部分信息可以唯一的标识这个链接,如果重复,会取第一个定位到的元素。定位方法:find_element(By.PARTIAL_LINK_TEXT,'partial text')

css selector元素定位

css_selector元素定位方法的使用方法较为复杂,且有局限性,需要在class前加#,在类前加.原内容为空格的需要用-填充

eg:

driver.find_element(By.CSS_SELECTOR,'i.c-icon.c-select-arrow').click()

eg: 

driver.find_element(By.LINK_TEXT,'高级搜索').click()
driver.find_element(By.PARTIAL_LINK_TEXT,'搜索').click()
driver.find_element(By.CSS_SELECTOR,'i.c-icon.c-select-arrow').click()

2.2.3 xpath元素定位

        以上的元素定位方式均会有定位不到的时候,这时候就需要xpath元素定位方式,顾名思义,xpath就是根据元素的路径去定位,每个元素都会有对应的路径,因此用这种方法基本能定位到所有元素。

Xpath可以分为以下几种定位方法。

绝对路径定位:find_element_by_xpath(“/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input”)

利用元素属性定位:

find_element_by_xpath(“//input[@id=‘kw’]”)

层级与属性结合:

find_element_by_xpath(“//form[@id='form']/span[1]/input”)

使用逻辑运算符:

find_element_by_xpath (“//input[@id=‘kw’ and  @class=‘su’]”)

eg:

driver.find_element(By.XPATH,'//*[@id="adv-setting-gpc"]/div/div[2]/div[2]/p[3]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//*[@id="adv-setting-8"]/input').click()
driver.find_element(By.XPATH,"//div[@class='s-top-left-new s-isindex-wrap']/a[6]").click()

 实例:

1.密码为空登录‘目标网址’

2.用户名密码不匹配登录‘目标网址’

3.获取提示内容

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

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('目标网址')
#密码为空登录
driver.find_element(By.XPATH,"//input[@class='text_cmu'][1]").send_keys('13800138006')
driver.find_element(By.XPATH,"//input[ @id='password']").send_keys('')
driver.find_element(By.XPATH,"//input[ @id='verify_code']").send_keys('1234')
driver.find_element(By.XPATH,"//a[@class='J-login-submit']").click()
time.sleep(2)
tt=driver.find_element(By.XPATH,"//div[@class='layui-layer-content layui-layer-padding']").text
print(tt)
driver.quit()

 以上就是常用的8中元素定位方法,大多数元素可以用以上方法定位到,如果有特殊元素无法定位,可以参考xpath的轴定位方式。


网站公告

今日签到

点亮在社区的每一天
去签到