首页 > 编程语言 >Python中Selenium模块的使用

Python中Selenium模块的使用

时间:2022-09-29 23:01:32浏览次数:87  
标签:定位 name Python 元素 Selenium element 模块 节点 find

目录

​Selenium的介绍、配置和调用​

​Selenium的配置​

​Selenium的调用​

​Selenium的使用​

​定位​

​定位元素的使用​

​定位下拉标签元素 ​

​在iframe框架之间切换 ​

​上传文件​

​Webdriver模块的使用​

​控制浏览器操作的一些方法 ​

​鼠标事件​

​键盘事件​

​获取断言信息​


Selenium的介绍、配置和调用

Selenium(浏览器自动化测试框架)

  • 框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
  • 使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
  • 使用简单,可使用Java,Python等多种语言编写用例脚本。

Selenium的配置

1、安装 Selenium模块:  pip  install  Selenium

2、下载浏览器驱动,Selenium3.x调用浏览器必须有一个webdriver驱动文件

下载之后,解压到任意目录(路径不要有中文)。

Selenium的调用

from selenium import webdriver

## 如果是chrome浏览器的驱动
driver=webdriver.Chrome("G:\Anaconda3-5.3.0\chromedriver.exe")

##如果是firefox浏览器的驱动
driver=webdriver.Firefox(executable_path="G:\Anaconda3-5.3.0\geckodriver.exe")

######如果浏览器驱动的目录加入了环境变量的话

## 如果是chrome浏览器的驱动
driver=webdriver.Chrome()

##如果是firefox浏览器的驱动
driver=webdriver.Firefox()

Selenium的使用

定位

Selenium提供了8种定位方式

  1. id
  2. name
  3. class  name
  4. tag name
  5. link text
  6. partial link text
  7. xpath
  8. css selector

定位元素的使用

定位一个元素

定位多个元素

含义

find_element_by_id

find_elements_by_id

通过元素id定位

find_element_by_name

find_elements_by_name

通过元素name定位

find_element_by_class_name

find_elements_by_class_name

通过classname进行定位

find_element_by_tag_name

find_elements_by_tag_name

通过标签定位

find_element_by_link_text

find_elements_by_link_tex

通过完整超链接定位

find_element_by_partial_link_text

find_elements_by_partial_link_text

通过部分链接定位

find_elements_by_css_selector

find_elements_by_css_selector

通过css选择器进行定位

find_element_by_xpath

find_elements_by_xpath

通过xpath表达式定位

例如:

<html>
<body>
<form id="loginForm">
<input name="username" type="text" classname="xie" id="key"/>
<input name="password" type="password" 型号 />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
<a href="http://www.baidu.com">百度一下</a>
</body>
</html>

通过id进行定位第一个input框: find_element_by_id("key") 

通过name进行定位第一个input框:find_element_by_name("username")

通过classname进行定位第一个input框:find_element_by_class_name("xie")

通过标签tag进行定位input框:find_element_by_tag_name("input")    //这里input太多了,用input标签定位会出错

通过完整超链接定位a标签: find_element_by_link_text("百度一下")

用xpath进行定位:

用绝对路径进行定位,input[1]代表form下面的第一个input标签,从1开始, input=input[1]
driver.find_elemant_by_xpath("//html/body/form/input[1]")

用相对路径进行定位,form标签下的第一个input标签,[1]省略了
driver.find_element_by_xpath("//form/input")

用相对路径和属性进行定位,form标签下的input标签的name值等于username的标签
driver.find_element_by_xpath("//form/input[@name='username']")

其他的属性值如果太长,也可以采取模糊方法定位
例如页面中有这么一个标签
<a href="http://www.baidu.com?name=admin&passwd=pass&action=login">百度一下</a>
则可以这么使用
driver.find_element_by_xpath("//a[contains(@href,'login')]")

以上是普通的情况,存在可以定位的属性,当某个元素的各个属性及其组合都不足以定位时,我们可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位,先看看xpath中支持的方法:

     1、child  选取当前节点的所有子元素

     2、parent  选取当前节点的父节点

     3、descendant选取当前节点的所有后代元素(子、孙等)

     4、ancestor  选取当前节点的所有先辈(父、祖父等)

     5、descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身

     6、ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身

     7、preceding-sibling选取当前节点之前的所有同级节点

     8、following-sibling选取当前节点之后的所有同级节点

     9、preceding   选取文档中当前节点的开始标签之前的所有节点

    10、following   选取文档中当前节点的结束标签之后的所有节点

    11、self  选取当前节点

    12、attribute  选取当前节点的所有属性

    13、namespace选取当前节点的所有命名空间节点

Python中Selenium模块的使用_上传

上图实例,需要点击订单号为17051915200001的发货按钮,这时候不能直接定位到发货按钮,而是要先定位到订单号元素,再定位他的兄弟节点。参照上图,我们首先定位到td标签中包含订单号的td元素,然后选择其之后的同级节点,following-sibling,我们要找的元素在后面的第8个td标签下,因此定位可以写名为下面的格式

driver.find_element_by_xpath("//td[contains(text(),’17051915200001’)]/following-sibling::td[8]/a[@class='link']")

但是如果页面中有两个相同的定位元素的话,我们这样使用就有可能会报错

比如有下面两个输入框,一个输入用户名的,一个输入密码的,但是 class 都是等于 inputclass 。这时,如果我们使用class_name 来定位元素的话,就会出现意想不到的错误

<input type="text" class="inputclass" name="username">
<input type="password" class="inputclass" name="password"><br/>

#python代码
driver.find_element_by_class_name("inputclass").send_keys("admin")
driver.find_element_by_class_name("inputclass").send_keys("password")

我们的本意是在username框内输入admin,password框内输入 password 。但是由于两个框的 class 相同,而我们又是使用class_name进行元素的定位,所以我们所有的操作都会对第一个元素进行。 

Python中Selenium模块的使用_firefox_02

还有如果我们定位的元素页面没有的话,也会报错

比如我们使用这条语句用class_name来进行定位元素,但是当页面没有 class_name="aa" 的元素的话,就会报错,表示找不到通过 class name 方法找的元素 aa

driver.find_element_by_class_name("aa").send_keys("bb")

NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"aa"}

定位下拉标签元素

Python中Selenium模块的使用_firefox_03

import Select
Select(driver.find_element_by_xpath("//select[@id='9560af43bfc949c4826d329c352e4eb6_class']")).select_by_index(4) #定位公共互联网环境

在iframe框架之间切换 

Python中Selenium模块的使用_firefox_04

#切换到指定的iframe框架
driver.switch_to.frame("mainFrame") #切换iframe框架
driver.switch_to.default_content() #切换到主框架

上传文件

上传文件使用的是AutoIt,安装好后,打开AutoIt Window Info,鼠标选中Finder Tool,然后鼠标左键按住拖到文件名框内,得到如图数据

Python中Selenium模块的使用_firefox_05

然后鼠标选中Finder Tool,鼠标左键按住拖到打开按钮,得到如图数据

Python中Selenium模块的使用_上传_06

打开SciTE Script Editor,输入如下内容

Python中Selenium模块的使用_上传_07

WinWait("CLASS:#32770","",5)  #设置5秒用于等待上传窗口的显示
ControlFocus("打开","","Edit1") #把输入焦点定位到上传文本框中
ControlSetText("打开","","Edit1","C:\Users\17250\Desktop\1.txt") #输入文件路径
Sleep(5000) #等待上传时间,单位毫秒
ControlClick("打开","","Button1"); #点击打开按钮,开始上传

保存为1.au3,点击Tools->Go运行。

然后打开Compile Script to .exe ,然后选中1.au3,它会自动将其转换为1.exe。

Python中Selenium模块的使用_上传_08

在python中使用

os.system("C:\\Users\\17250\\Desktop\\1.exe")

Webdriver模块的使用

控制浏览器操作的一些方法 

方法

说明

set_window_size()

设置浏览器的大小

back()

控制浏览器后退

forward()

控制浏览器前进

refresh()

刷新当前页面

clear()

清除文本

send_keys (value)

模拟按键输入

click()

单击元素

submit()

用于提交表单

get_attribute(name)

获取元素属性值

is_displayed()

设置该元素是否用户可见

size

返回元素的尺寸

text

获取元素的文本

 

 

 

 

鼠标事件

在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

方法

说明

ActionChains(driver)

构造ActionChains对象

context_click()

执行鼠标悬停操作

move_to_element(above)

右击

double_click()

双击

drag_and_drop()

拖动

move_to_element(above)

执行鼠标悬停操作

context_click()

用于模拟鼠标右键操作, 在调用时需要指定元素定位

perform()

执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作

 

 

 

 

 

 

 

 

键盘事件

Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。

常用的键盘操作如下:

模拟键盘按键

说明

send_keys(Keys.BACK_SPACE)

删除键(BackSpace)

send_keys(Keys.SPACE)

空格键(Space)

send_keys(Keys.TAB)

制表键(Tab)

send_keys(Keys.ESCAPE)

回退键(Esc)

send_keys(Keys.ENTER)

回车键(Enter)

组合键的使用

模拟键盘按键

说明

send_keys(Keys.CONTROL,‘a’)

全选(Ctrl+A)

send_keys(Keys.CONTROL,‘c’)

复制(Ctrl+C)

send_keys(Keys.CONTROL,‘x’)

剪切(Ctrl+X)

send_keys(Keys.CONTROL,‘v’)

粘贴(Ctrl+V)

send_keys(Keys.F1…Fn)

键盘 F1…Fn

获取断言信息

不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。

属性

说明

title

用于获得当前页面的标题

current_url

用户获得当前页面的URL

text

获取搜索条目的文本信息



标签:定位,name,Python,元素,Selenium,element,模块,节点,find
From: https://blog.51cto.com/csnd/5724378

相关文章

  • Python中的时间日期模块(time、datetime)
    目录​​Datetime​​​​获取当前时间​​​​获取当前日期​​​​获取当前时间的tuple元组​​​​格式化日期和时间​​​​时间移动​​​​获取两个时间的时间差​​......
  • Python中math和cmath模块的使用
    目录​​Math模块​​​​Cmath模块​​Math模块pi                数字常量,圆周率e                 表示一个常量sqrt(x)      ......
  • python MLPRegressor神经网络回归预测
       '''载入数据'''fromsklearnimportdatasetsimportsklearnboston=datasets.load_boston()x,y=boston.data,boston.target'''引入标准化函数'''from......
  • Python第五章实验报告
    一、实验题目Python第五章实例和实战作业二、实验目的和要求1.熟悉Pycharm的运行环境2.学习并掌握Python的字符串及正则表达式三、主要仪器设备联想小新air15硬件:AM......
  • C++调用python(二)
    目录三、调用函数四、调用类五、调用SSD目标检测算法六、遇到的错误参考链接:正文一、基本使用方法二、调用简单语句三、调用函数四、调用类五、调用SSD目标......
  • 浅析 C++ 调用 Python 模块
    浅析C++调用Python模块作为一种胶水语言,Python能够很容易地调用C、C++等语言,也能够通过其他语言调用Python的模块。Python提供了C++库,使得开发者能很方便......
  • C++ CMake 使用 Python3
    C++CMake使用Python3CMakeListst设置#如果使用的是非系统目录下的Python可以通过指定Python3_ROOT_DIR改变查找路径#set(Python3_ROOT_DIR"${CMAKE_SOURCE_D......
  • Python操作数据库
    python使用MySQL主要有两个模块,pymysql(MySQLdb)和SQLAchemy。pymysql(MySQLdb)为原生模块,直接执行sql语句,其中pymysql模块支持python2和python3,MySQLdb只支持python2,两者......
  • python实现找到列表中第二大的数字
    '''给定一个长度大于3的列表,里面数字是无序的,且数字不重复,如何找到第二大的数字?例如列表a=[1,3,6,2,7,9],找到的结果就应该是:7下面给出六种解决方案'''a=[1,3,6......
  • Python基础7
    今日内容概要数据类型内置方法理论整型相关操作浮点型相关操作字符串相关操作列表相关操作可变与不可变今日内容详细数据类型内置方法理论数据类型......