WrapsElement接口getWrappedElement()方法作用及为何仅Select类实现
关于WrapsElement接口getWrappedElement()方法的解答
方法作用
WrapsElement是Selenium官方设计的规范接口,专门给封装了原生WebElement的工具类使用,getWrappedElement()的核心作用就是返回当前类实例内部包裹的原始WebElement对象。
对应到Select类的场景:你初始化Select实例时传入的<select>标签对应的WebElement,会被保存在Select实例的内部属性中,你调用的selectByValue、deselectAll等所有下拉操作方法,本质都是在操作这个内部存储的原始元素。getWrappedElement()就是把这个内部元素暴露给开发者的公开入口。
常用场景
这个方法最大的价值是避免重复定位元素,当你已经封装好Select实例后,如果需要对原始下拉框元素做其他操作,不需要再重新调用定位方法找一次元素,直接调用该方法拿到原始对象即可,常见用法示例:
// 初始化Select实例 WebElement rawSelect = driver.findElement(By.id("user_city")); Select citySelect = new Select(rawSelect); // 校验两个元素是否为同一个对象,输出结果为true System.out.println(citySelect.getWrappedElement() == rawSelect); // 直接用返回的原始元素做属性判断、元素操作 if(citySelect.getWrappedElement().isEnabled()){ citySelect.selectByValue("beijing"); System.out.println("下拉框name属性为:" + citySelect.getWrappedElement().getAttribute("name")); }
关于“是否只有Select类实现该接口”的说明
实际并不是只有Select类实现了WrapsElement接口,Selenium内部很多封装类比如事件监听增强的EventFiringWebElement、PageFactory生成的代理元素类都实现了这个接口。只是在日常开发常用的官方工具类中,开发者接触最多的只有Select而已。
这个接口的设计本质是Selenium内部的统一规范:所有封装了原生WebElement的类,都要给用户提供获取原始元素的统一入口,避免封装之后开发者丢失对原始元素的操作权限。
内容的提问来源于stack exchange,提问作者NoNoNo
相关产品推荐
相关产品推荐

