python中bs4做web自动化_实用selenium+python实现web自动化测试第四节

本节要解决的问题:

如何定位一组元素?

场景

从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,

这时候就需要使用findElements方法。

定位一组对象一般用于以下场景:

· 批量操作对象,比如将页面上所有的checkbox都勾上

· 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

Checkbox

checkbox

checkbox1

checkbox2

checkbox3

radio

radio

将这段代码保存复制到记事本中,将保存成checkbox.html文件。(注意,这个页面需要和我们的自动化脚本放在同一个目录下)

第一种方法:

通过浏览器打个这个页面我们看到三个复选框和两个单选框。下面我们就来定位这三个复选框。

# -*- coding: utf-8 -*-

from selenium import webdriver

import time

import os

dr = webdriver.Firefox()

file_path =  'file:///' + os.path.abspath('checkbox.html')

dr.get(file_path)

# 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之

inputs = dr.find_elements_by_tag_name('input')

for input in inputs:

if input.get_attribute('type') == 'checkbox':

input.click()

time.sleep(2)

dr.quit()

你可以试着把input.get_attribute('type') == 'checkbox' 中的checkbox 变成radio ,那这个脚本定位的会是两个单选框。

第二种定位方法:

# -*- coding: utf-8 -*-

from selenium import webdriver

import time

import os

dr = webdriver.Firefox()

file_path =  'file:///' + os.path.abspath('checkbox.html')

dr.get(file_path)

# 选择所有的checkbox并全部勾上

checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')

for checkbox in checkboxes:

checkbox.click()

time.sleep(2)

# 打印当前页面上有多少个checkbox

print len(dr.find_elements_by_css_selector('input[type=checkbox]'))

time.sleep(2)

dr.quit()

第二种写法与第一种写法差别不大,都是通过一个循环来勾选控件;如果你学过上一章的话,细心的你一定发现用的定位函数不一样,

第一种用的name ,第二种用的CSS 。

如何去掉勾选:

还有一个问题,有时候我们并不想勾选页面的所有的复选框(checkbox),可以通过下面办法把最后一个被勾选的框去掉。如下:

# -*- coding: utf-8 -*-

from selenium import webdriver

import time

import os

dr = webdriver.Firefox()

file_path =  'file:///' + os.path.abspath('checkbox.html')

dr.get(file_path)

# 选择所有的checkbox并全部勾上

checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')

for checkbox in checkboxes:

checkbox.click()

time.sleep(2)

# 把页面上最后1个checkbox的勾给去掉

dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()

time.sleep(2)

dr.quit()

其实,去掉勾选表也逻辑也非常简单,就是再次点击勾选的按钮。可能我们比较迷惑的是如何找到“最后一个”按钮。pop() 可以实现这个功能。

好吧!在web自动化的学习过程中,我们必须要知道一些前端的东西,这里扩展一下:

http://www.w3school.com.cn/js/jsref_pop.asp

尝试:

把find_elements_by_css_selector('input[type=checkbox]').pop().click() 中的checkbox 变成radio 会是什么效果,自己尝试一下吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python进行自动化测试时,可以使用许多不同的库和工具来定位同级元素。以下是几种常见的方法: 1. 使用XPath定位:XPath是一种用于在XML文档定位节点的语言。可以使用XPath表达式来定位同级元素。可以使用Python的`lxml`库或者`xml.etree.ElementTree`模块来解析XML,然后使用XPath表达式进行定位。 ```python from lxml import etree # 解析XML xml = etree.parse('your_xml_file.xml') # 使用XPath定位同级元素 elements = xml.xpath('//parent_element/sibling_element') ``` 2. 使用CSS选择器定位:可以使用`beautifulsoup`库或者`pyquery`库来解析HTML,然后使用CSS选择器来定位同级元素。 ```python from bs4 import BeautifulSoup # 解析HTML html = ''' <html> <body> <div id="parent_element"> <span class="sibling_element">Element 1</span> <span class="sibling_element">Element 2</span> <span class="sibling_element">Element 3</span> </div> </body> </html> ''' soup = BeautifulSoup(html, 'html.parser') # 使用CSS选择器定位同级元素 elements = soup.select('#parent_element .sibling_element') ``` 3. 使用Selenium定位:如果需要在浏览器进行自动化测试,可以使用Selenium库来定位同级元素。Selenium提供了多种定位元素的方法,例如使用ID、类名、XPath等。 ```python from selenium import webdriver # 启动浏览器 driver = webdriver.Chrome() # 打开网页 driver.get('https://www.example.com') # 使用XPath定位同级元素 elements = driver.find_elements_by_xpath('//parent_element/sibling_element') ``` 这些方法只是其的一部分,根据具体的情况和需求,选择合适的方法来定位同级元素。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值