实例化多个元素定位问题
来源: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回答
-
定位多个元素的改法如下:
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__外部封装或者子类页面中直接调用即可。
022021-06-28
相似问题