实例化多个元素定位问题

来源:3-6 页面对象开发的第二种实现方式

飞扬的少年

2021-06-20

图片描述
老师这里为什么只返回单个元素定位的方法?如果定位多个元素怎么办?

我看了下源码find_element和find_elements方法都是调用私有方法execute(RemoteCommand.FIND_CHILD_ELEMENT, {“using”: by, “value”: value})[‘value’]来实现的。
我想的是self.driver._WebElement_execute直接从外部访问。
不过这样yml配置文件数据格式就要多加一条findChildElement或者findChildElements用来区分是单/多个元素来定位,而且直接从外部访问私有变量也不符合设计规范。

另外如果页面定位需要触发ajax,比如scroll对象。或者html5的date对象 我想使用execute_script() 来定位,那我数据格式新增的改成findChildElement/findChildElements/JS来判断么?
图片描述
我的思路是把方法改造成这样 具体私有方法名,可以通过self.driver,__dict__找.
图片描述

写回答

1回答

托尼老师

2021-06-23

定位多个元素的改法如下:

1、调整__getattr__内返回元素的逻辑:

将return self.driver.find_element(by, val)改成

ele_list = self.driver.find_elements(by, val)
return ele_list[0] if ele_list.__len__() == 1 else ele_list

这样就兼容单个元素和一组元素的定位了;

2、至于执行js,直接在__getattr__外部封装或者子类页面中直接调用即可。



0
2
托尼老师
回复
飞扬的少年
推荐python官方文档,有中文的,主要看标准库。
2021-06-28
共2条回复

Python自动化测试开发实战,能帮你就业的测试课

开发高扩展、高可用的自动化测试框架,利用好测试自动化技术。

445 学习 · 157 问题

查看课程