Java:调用名称存储在变量中的方法

2022-09-03 04:13:02

我有一个要求,例如:

String command = "click";   // this can have value such as clear, getLocation, getSize, getTagName etc. 
WebDriver driver = new ChromeDriver(options); //creating a webdriver object
driver.findElement(By.id("id1")).click(); //Here I want "click" method should be called dynamically as per what I have stored in variable `command`.

那么,有没有可能的东西,比如:

driver.findElement(By.id("id1")).<something to call click()>

我已经看过Java中的Reflectm,但根据我的要求,这对我来说很复杂。任何指针都会有所帮助!


答案 1

您的变量表示要对 Web 元素执行的操作(在本例中,单击它)。

相应的类型不是 。请改用 a(或任何返回的类型):StringConsumer<WebElement>driver.findElement()

Consumer<WebElement> command = e -> e.click();

// ...

command.accept(driver.findElement(By.id("id1")));

这是类型安全的,高效的,可重构的,并且比反射更灵活(因为你的消费者可以对元素做任何它想要的操作,而不限于没有任何参数的单个方法调用。例如,在文本字段中输入一些文本)


答案 2

执行此操作的最简单方法是使用反射:

String command = "click";
WebElement element = driver.findElement(By.id("id1"));

Method method = WebElement.class.getMethod(command);
method.invoke(element);

如果您还想使用反射进行调用,则可以执行以下操作:By.id

String command = "click";
String id = "id";

Method byMethod = By.class.getMethod(id, String.class);
WebElement element = driver.findElement((By) byMethod.invoke(null, "id1"));

Method method = WebElement.class.getMethod(command);
method.invoke(element);

推荐