>>> from env_helper import info; info()
页面更新时间: 2024-01-14 10:18:02
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-16-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

5.7. selemium模块使用

Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,模拟用户操作。 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。 测试系统功能——创建回归测试检验软件功能和用户需求。 支持自动录制动作和自动生成 .Net、Java、Perl、python等不同语言的测试脚本。

5.7.1. 功能

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

5.7.2. 安装selenium

使用 pip 安装:

pip3 install selenium

在 Debian / Ubuntu 中安装:

sudo apt install -y python3-selenium

5.7.3. selenium的基本用法

测试脚本如下: script_selenium.py

声明浏览器对象

上面我们知道了selenium支持很多的浏览器:

from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()

这里只写了两个例子,当然了其他的支持的浏览器都可以通过这种方式调用

driver = webdriver.Chrome()

这是缺少浏览器驱动导致报错,需要安装浏览器驱动。

找到自己对应的下载即可。

访问页面

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https:www.baidu.com'
browser.get(url)
browser.close()

成功后会打开一个页面,打开百度的首页。然后关闭浏览器

单个元素查找

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https:www.taobao.com'
browser.get(url)
input_first = browser.find_element_by_id('q')
input_two = browser.find_element_by_css_selector('#q')
input_first
input_two

这里我们通过2种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,结果都是相同的。 输出如下:

<selenium.webdriver.remote.webelement.WebElement (session=“9aaa01da6545ba2013cc432bcb9abfda”, element=“0.5325244323105505-1”)>

<selenium.webdriver.remote.webelement.WebElement (session=“9aaa01da6545ba2013cc432bcb9abfda”, element=“0.5325244323105505-1”)>

这里列举一下常用的查找元素方法:

find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

下面这种方式是比较通用的一种方式:这里需要记住By模块所以需要导入

from selenium.webdriver.common.by import By

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
url = 'https://www.taobao.com'
browser.get(url)
input_1 = browser.find_element(By.ID, 'q')
input_1

当然这种方法和上述的方式是通用的,browser.find_element(By.ID,"q")这里By.ID中的ID可以替换为其他几个

多个元素查找

其实多个元素和单个元素的区别,举个例子:find_elements,单个元素是find_element,其他使用上没什么区别,通过其中的一个例子演示:

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.taobao.com'
browser.get(url)
input = browser.find_elements_by_css_selector('.service-bd li')
input
browser.close()

输出为一个列表形式:

当然上面的方式也是可以通过导入from selenium.webdriver.common.by import By 这种方式实现

lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')

同样的在单个元素中查找的方法在多个元素查找中同样存在:

元素交互操作

对于获取的元素调用交互方法

from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get(url='https://www.baidu.com')
time.sleep(2)
input = browser.find_element_by_css_selector('#kw')
input.send_keys('OSGeo中国中心')
time.sleep(2)
input.clear()
input.send_keys('DRR防灾减灾')
button = browser.find_element_by_css_selector('#su')
button.click()
time.sleep(10)
browser.close()

运行的结果可以看出程序会自动打开Chrome浏览器并打开百度页面输入“OSGeo中国中心”,然后删除,重新输入“DRR防灾减灾”,并点击搜索

更多支持操作包括: 交互动作, 执行JavaScript, 获取元素属性, 获取ID,位置,标签名。