python自动化9 处理常见自动化场景方法(批量处理一组对象、层级定位、网页嵌套定位、弹窗识别(js弹窗))
发布日期:2023-05-26 14:16:26
浏览次数:5
分类:技术文章
本文共 2260 字,大约阅读时间需要 7 分钟。
批量处理一组对象
webdriver使用find element方法定位一个特定的对象,不过我们有时需定位一组对象,webdriver同样提供了定位一组元素的方法叫find elements,定位一组对象一般用于以下场景:
1、批量操作对象,比如将页面上的checkbox都勾选上。 2、先获取一组对象,再在这组对象中过滤需要具体定位的一些对象。有多个选择框时,把选择框全部读出来放入到列表中,再以遍历的方式勾选上。
import sys ,ossys.path.append(os.getcwd()+'/../test_data')from test_data.web_driver_utils import WebDriverimport timeurls = 'http://127.0.0.1/zentao/user-login.html'driver = WebDriver()driver.get_urls(urls)eles = driver.find_element_xpath('//input[contains(@name,"checkbox")]')for e in eles: time.sleep(1) e.click()
层级定位
在实际的项目测试中,经常会遇到无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。
层级定位的思想是先定位父对象,然后再从父对象中精确定位出其我们需要选取的后代元素。driver.find_element_by_id('***').find_element_by_link_text('***')
网页嵌套定位
html—A中嵌html—B(iframe实现),由页面A跳转到页面B中,识别页面B中的元素。
在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B。
switch_to_frame方法可以把当前定位的主题切换到frame里,在frame里实际是嵌套了另外一个页面,而webdriver每次只能在一个页面识别,所以需要用switch to frame方法去获取frame中嵌套的页面。class WebDriver: def __init__(self,driver_path=config_u.get_driver_path): path = Service(driver_path) self.driver = webdriver.Firefox(service=path) self.mouse = ActionChains(self.driver) def switch_to_frame_xpath(self,xpath_path): #页面A跳转到页面B self.driver.switch_to.frame(xpath_path) def switch_to_frame_default(self): # 页面B跳转主页面(默认页面) self.driver.switch_to.default_content()
弹窗识别(js弹窗)
有时会出现,弹窗元素无法识别。
class WebDriver: def __init__(self,driver_path=config_u.get_driver_path): path = Service(driver_path) self.driver = webdriver.Firefox(service=path) self.mouse = ActionChains(self.driver) def get_urls(self,urls): try: self.driver.get(urls) log_utils.print_file_log('info', '窗口打开成功') except Exception as e: log_utils.print_file_log('error','url错误:'+str(e)) def switch_to_alter(self): #跳转到js弹窗 s = self.driver.switch_to.alert return s def alter_get_element(self): #js内的相关操作 s = WebDriver.switch_to_alter() s= s.text #获取文本 s.dismiss() #点击取消 s.accept() #点击确认 s.send_keys('ssss') #输入
driver.witch_to.alert.send_keys(‘ssss’)单独使用时不会输入;
必须和driver.witch_to.alert.accept()同时使用。(selenium的一个显示bug)转载地址:https://blog.csdn.net/xiaoqiukuzi/article/details/129165644 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月10日 11时03分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JDK源码研究Jstack,JMap,threaddump,dumpheap的原理
2019-04-27
Java使用字节码和汇编语言同步分析volatile,synchronized的底层实现
2019-04-27
javac编译原理和javac命令行的使用
2019-04-27
Unity使用UnityWebRequest实现本地日志上传到web服务器
2019-04-27
Unity使用RenderTexture实现裁切3D模型
2019-04-27
美术和程序吵架,原来是资源序列化格式设置不统一
2019-04-27
Unity iOS接SDK,定制UnityAppController
2019-04-27
Unity iOS接SDK前先要了解的知识(Objective-C)
2019-04-27
记一次iOS闪退问题的定位:NSLog闪退
2019-04-27
Unity打开照相机与打开本地相册然后在Unity中显示照片(Android与iOS)
2019-04-27
无需接入SDK即可在Unity中获取经纬度(Android/iOS),告诉我你的坐标
2019-04-27
Unity获取系统信息SystemInfo(CPU、显卡、操作系统等信息)
2019-04-27
Unity中获取物体的尺寸(size)的三种方法
2019-04-27
Unity中的关节组件和绳子效果的实现
2019-04-27
Unity可视化编程插件: Bolt,可以像UE4的蓝图那样啦
2019-04-27
Android的.dex、.odex与.oat文件扫盲
2019-04-27
Unity移动应用如何在Bugly上查看崩溃堆栈
2019-04-27
unity3D 在屏幕边框创建碰撞框
2019-04-27