欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Selenium(Python web测试工具)基本用法详解

程序员文章站 2023-08-25 13:34:39
本文实例讲述了selenium基本用法。分享给大家供大家参考,具体如下: selenium是一个用于web应用程序测试的工具。selenium测试直接运行在浏览器中,就像...

本文实例讲述了selenium基本用法。分享给大家供大家参考,具体如下:

selenium是一个用于web应用程序测试的工具。selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括ie(7, 8, 9, 10, 11),mozilla firefox,safari,google chrome,opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .net、java、perl等不同语言的测试脚本。

安装

pip install selenium

安装驱动程序

下面介绍几种主流浏览器的驱动程序下载地址:

浏览器 下载地址
chrome
edge
firefox
safari

下面以windows环境,chrome浏览器为例,我下载的是2.36版本的驱动chromedriver_win32.zip,解压得到一个chromedriver.exe文件,将其放置在浏览器的安装目录之下,如图所示:

Selenium(Python web测试工具)基本用法详解

selenium的简单用法

如果你已经按照上面安装了selenium,并且安装了驱动程序,下面来简单的玩一玩selenium:

from selenium.webdriver import chrome
from selenium.webdriver.common.keys import keys
# 创建chrome webdriver实例,此路径为驱动程序的路径
driver = chrome("c:\program files (x86)\google\chrome\application\chromedriver.exe")
# 加载url网页
driver.get("http://www.baidu.com/")
# 判断标题中是否包含该字符串
assert "百度一下" in driver.title
# 查找id=kw的节点
element = driver.find_element_by_id("kw")
# 清空原有的输入,输入python进行搜索
element.clear()
element.send_keys("python")
element.send_keys(keys.return)
# 判断是否有结果返回
assert "no results found." not in driver.page_source
# 关闭当前标签,也可以使用quit()关闭浏览器
driver.close()

上面的栗子,简单介绍了一下selenium的用法,接下来将结合selenium与unittest来编写测试:

import unittest
from selenium.webdriver import chrome
from selenium.webdriver.common.keys import keys
# 继承至testcase,表示这是一个测试用例类
class baiducase(unittest.testcase):
  # 初始化的一部分
  def setup(self):
    self.driver = chrome("c:\program files (x86)\google\chrome\application\chromedriver.exe")
  # 测试用例方法,名称可以自定义,方法名称始终以test开头
  def test_serch(self):
    self.driver.get("https://www.baidu.com/")
    assert "百度一下" in self.driver.title
    element = self.driver.find_element_by_id("kw")
    element.clear()
    element.send_keys("python")
    element.send_keys(keys.return)
    assert "no results found." not in self.driver.page_source
  # 在执行完各种测试用例方法之后会执行,为一个清理操作
  def teardown(self):
    self.driver.close()
if __name__ == "__main__":
  unittest.main()

执行上面的代码,将会返回如下信息:

.
----------------------------------------------------------------------
ran 1 test in 2.914s
ok

值得注意的是,如果没有配置驱动,或者路径写错了,将会出现webdriverexception错误

与网页互动

与一个网页进行的真正的交互,具体的说,与网页的html元素进行交互。如果需要与之交互,那么久必须要查找到html的元素。webdriver提供了多种查找html元素的方法。例如,给定一个元素为:

<input type="text" name="passwd" id="passwd-id"/>

我们可以使用下面任意方法查找到它:

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

值的注意的是,使用xpath进行匹配时,如果有多个元素与查询匹配,只会返回第一个元素。如果什么都找不到,将会返回nosuchelementexception错误。当你查找到一个元素时,你可以用它做什么?首先你可能会想到在文本标签中输入一些文本:

element.send_keys("python")

也可以使用keys来模拟一些箭头键:

from selenium.webdriver.common.keys import keys
element.send_keys(keys.arrow_down)

你也可以使用clear()方法来清除文本标签里的内容:

element.clear()

切换下拉菜单的状态,我们可以依次循环选择每个选项并依次选择每个选项:

element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
  option.click()

正如你所看到的,这并不是处理select元素的最有效的方式。webdriver类包还包括一个名为select的类,它提供了与这些类交互的有用的方法:

from selenium.webdriver.support.ui import select
element = driver.find_element_by_xpath("//select[@name='name']")
select = select(element)
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value("value")

webdriver还提供取消选择所有选项的功能:

element = driver.find_element_by_id('id')
select = select(element)
select.deselect_all()

select还具有获取所有已经选中的标签的方法:

element = driver.find_element_by_id('id')
select = select(element)
all_options = select.all_selected_options

获取所有可用的选项:

options = select.options

完成后表格填写后,您可以需要提交,一种方法是找到submit按钮并点击它:

driver.find_element_by_id('submit').click()

webdriver在每个元素上都有一个submit的便利方法,如果你在一个表单的元素上调用它,webdriver会遍历dom直到包含表单,然后调用它:

element.submit()

webdriver还提供了前进与后退的操作:

driver.forward()
driver.back()

webdriver还可以进行设置cookies和获取cookies:

driver.get('https://www.baidu.com/')
driver.add_cookie({"name":"foo","value":"laozhang"})
print(driver.get_cookies()

更多关于python相关内容感兴趣的读者可查看本站专题:《python socket编程技巧总结》、《python url操作技巧总结》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》及《python入门与进阶经典教程

希望本文所述对大家python程序设计有所帮助。