自动化测试之Selenium

选择元素的基本方法
请大家用chrome浏览器访问百度,按F12后,点击下图箭头处的Elements标签,即可查看页面对应的HTML 元素
在这里插入图片描述
之后,鼠标在界面上点击哪个元素,就可以查看 该元素对应的html标签 了。
比如,前面的图的高亮处,就是百度搜索输入框 对应的 input元素。

根据id选择元素
所以如果元素有id, 根据id选择元素是最简单高效的方式。

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

# 创建 WebDriver 对象
wd = webdriver.Chrome()

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com/')

# 根据id选择元素,返回的就是该元素对应的WebElement对象
element = wd.find_element(By.ID, 'kw')

# 通过该 WebElement对象,就可以对页面元素进行操作了
# 比如输入字符串到 这个 输入框里
element.send_keys('学习\n')

运行结果
在这里插入图片描述
ps:
如果根据 传入的ID,找不到这样的元素,find_element 方法就会抛出 selenium.common.exceptions.NoSuchElementException 异常

特别注意:Selenium 升级到版本 4 以后, 下面这种 find_element_by* 方法都作为过期不赞成的写法

# 初始化代码 ....

wd.find_element_by_id('username').send_keys('byhy')
wd.find_element_by_class_name('password').send_keys('sdfsdf')
wd.find_element_by_tag_name('input').send_keys('sdfsdf')
wd.find_element_by_css_selector('button[type=submit]').click()

运行会有告警,所以现在都要写成下面这种格式

from selenium.webdriver.common.by import By

# 初始化代码 ....

wd.find_element(By.ID, 'username').send_keys('byhy')
wd.find_element(By.CLASS_NAME, 'password').send_keys('sdfsdf')
wd.find_element(By.TAG_NAME, 'input').send_keys('sdfsdf')
wd.find_element(By.CSS_SELECTOR,'button[type=submit]').click()

根据 class属性、tag名 选择元素
注意:
find_elements 返回的是找到的符合条件的 所有 元素, 放在一个 列表 中返回。
而如果我们使用find_element (注意少了一个s) 方法, 就只会返回 第一个 元素。

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

# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()

# WebDriver 实例对象的get方法 可以让浏览器打开指定网址
wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
elements = wd.find_elements(By.CLASS_NAME, 'animal')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
    print(element.text)

通过 WebElement 对象的 text属性 可以获取该元素 在网页中的文本内容。

就像一个 学生张三 可以定义有 多个 类型: 中国人 和 学生 , 中国人 和 学生 都是 张三 的 类型。

元素也可以有 多个class类型 ,多个class类型的值之间用 空格 隔开,比如

<span class="chinese student">张三</span>

注意,这里 span元素 有两个class属性,分别 是 chinese 和 student, 而不是一个 名为 chinese student 的属性。

我们要用代码选择这个元素,可以指定任意一个class 属性值,都可以选择到这个元素,如下

element = wd.find_elements(By.CLASS_NAME,'chinese')

或者

element = wd.find_elements(By.CLASS_NAME,'student')

而不能这样写

element = wd.find_elements(By.CLASS_NAME,'chinese student')

根据 tag 名 选择元素

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

wd = webdriver.Chrome()

wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 tag name 选择元素,返回的是 一个列表
# 里面 都是 tag 名为 div 的元素对应的 WebElement对象
elements = wd.find_elements(By.TAG_NAME, 'div')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
    print(element.text)

find_element 和 find_elements 的区别
使用 find_elements 选择的是符合条件的 所有 元素, 如果没有符合条件的元素, 返回空列表

使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出 NoSuchElementException 异常

指定关键字下的内容

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

wd = webdriver.Chrome()

wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

element = wd.find_element(By.ID,'container')

# 限制 选择元素的范围是 id 为 container 元素的内部。
spans = element.find_elements(By.TAG_NAME, 'span')
for span in spans:
    print(span.text)

等待界面元素出现
Selenium 的 Webdriver 对象 有个方法叫 implicitly_wait ,可以称之为 隐式等待 ,或者 全局等待 。

该方法接受一个参数, 用来指定 最大等待时长。

wd.implicitly_wait(10)
from selenium import webdriver
from selenium.webdriver.common.by import By

wd = webdriver.Chrome()
wd.implicitly_wait(10)

wd.get('https://www.byhy.net/_files/stock1.html')

element = wd.find_element(By.ID, 'kw')

element.send_keys('通讯\n')


# 返回页面 ID为1 的元素
element = wd.find_element(By.ID,'1')

print(element.text)

有时候需要time.sleep,原因在于一些网页前段处理的数据需要等待一小小会,但是那个元素是在的,隐式等待只能等待还没有出现的元素!

操控元素
元素对象:通过例如 element = wd.find_element(By.ID, ‘kw’)返回的element

1、点击元素

element.click()

2、输入框

element.clear()	# 清空框内容
element.send_keys('hello')	# 输入hello内容

3、获取元素信息
获取页面内容

element = wd.find_element(By.ID, 'animal')
print(element.text)
element = wd.find_element(By.CLASS_NAME, 'c-btn')
print(element.get_attribute('class'))

get_attribute输出结果
在这里插入图片描述

4、获取整个元素对应的HTML
要获取整个元素对应的HTML文本内容,可以使用
以百度翻译为例:

 element.get_attribute('outerHTML')

在这里插入图片描述
在这里插入图片描述如果,只是想获取某个元素 内部 的HTML文本内容,可以使用

element.get_attribute('innerHTML')

在这里插入图片描述

获取输入框里面的文字

对于input输入框的元素,要获取里面的输入文本,用text属性是不行的,这时可以使用 element.get_attribute(‘value’)

element = wd.find_element(By.ID, "input1")
print(element.get_attribute('value')) # 获取输入框中的文本

获取元素文本内容2
通过WebElement对象的 text 属性,可以获取元素 展示在界面上的 文本内容。

但是,有时候,元素的文本内容没有展示在界面上,或者没有完全完全展示在界面上。 这时,用WebElement对象的text属性,获取文本内容,就会有问题。

出现这种情况,可以尝试使用 element.get_attribute(‘innerText’) ,或者 element.get_attribute(‘textContent’)

使用 innerText 和 textContent 的区别是,前者只显示元素可见文本内容,后者显示所有内容(包括display属性为none的部分)

ps:转发于白月黑羽
https://www.byhy.net/tut/auto/selenium/02/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium 是一个用于自动化 Web 浏览器操作的 Python 库。它可以模拟用户在浏览器中的行为,如点击、输入、提交表单等。Selenium 可以与各种不同的浏览器(如 Chrome、Firefox、Edge 等)进行集成,并且支持多种编程语言,包括 Python。 在 Python 中使用 Selenium 进行自动化测试,你需要首先安装 Selenium 库。你可以通过 pip 命令来安装,如下所示: ``` pip install selenium ``` 安装完毕后,你还需要下载对应浏览器的 WebDriver,WebDriver 是 Selenium 的一个核心组件,它负责与浏览器进行通信。你可以通过浏览器的官方网站或者 Selenium 官方文档找到对应的 WebDriver 下载地址。 一旦安装好 Selenium 和对应的 WebDriver,你就可以开始编写自动化测试代码了。你可以使用 Selenium 提供的 API 来控制浏览器进行各种操作,如打开网页、查找元素、填写表单等。 以下是一个简单的示例代码,演示了如何使用 SeleniumChrome 浏览器中打开百度并搜索关键词: ```python from selenium import webdriver # 创建一个 Chrome 浏览器对象 driver = webdriver.Chrome() # 打开百度首页 driver.get("https://www.baidu.com") # 根据 ID 获取搜索框元素,并输入关键词 search_box = driver.find_element_by_id("kw") search_box.send_keys("Python 自动化测试") # 提交搜索表单 search_box.submit() # 关闭浏览器 driver.quit() ``` 通过编写类似这样的代码,你可以实现更复杂的自动化测试功能,如点击按钮、选择下拉框、验证页面元素等。Selenium 还提供了丰富的 API 文档和示例代码,可以帮助你更好地理解和使用它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值