Java Selenium如何根据调用类不同点击对应ID元素 避免重复代码
错误原因
你编写的if (Class_1.class)语法不成立的核心原因是:Java中if的判断条件必须返回布尔类型值,而Class_1.class是Class<Class_1>类型的类对象,无法直接转换为布尔值,因此会抛出类型不匹配错误。
推荐解决方案
方案1:公共方法新增ID传参(最优,易维护)
直接在两个类调用公共方法时传入对应的元素ID,不需要额外判断逻辑,完全避免重复代码:
公共方法定义:
// 公共调用的点击方法,入参为对应要点击的元素ID public void commonClickBtn(String targetElementId) { findElement(By.id(targetElementId)).click(); }
调用逻辑:
- Class_1中调用:
commonClickBtn(ID_1) - Class_2中调用:
commonClickBtn(ID_2)
方案2:通过调用栈判断调用方类(不推荐,稳定性差)
如果确实不能修改方法入参,可以通过获取线程调用栈的方式判断调用方类,实现对应逻辑:
// 索引2对应调用当前公共方法的上层类信息 String callerClass = Thread.currentThread().getStackTrace()[2].getClassName(); if (callerClass.equals(Class_1.class.getName())) { findElement(By.id(ID_1)).click(); } else if (callerClass.equals(Class_2.class.getName())) { findElement(By.id(ID_2)).click(); }
注意:该方案依赖调用栈层级,后续如果方法调用链路发生变化,索引取值需要同步调整,维护成本高,仅作为临时兼容方案使用。
内容的提问来源于stack exchange,提问作者Rio
相关产品推荐
相关产品推荐

