我有这样的要求:
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 中的反射,但根据我的要求,这对我来说很复杂。任何指示都会有所帮助!
最佳答案
您的变量代表您想对网络元素执行的操作(在本例中,单击它)。
适合的类型不是 String
.使用 Consumer<WebElement>
相反(或者 driver.findElement()
返回的任何类型):
Consumer<WebElement> command = e -> e.click();
// ...
command.accept(driver.findElement(By.id("id1")));
这是类型安全的、高效的、可重构的,并且比反射灵活得多(因为您的消费者可以对元素做任何它想做的事情,不限于没有任何参数的单个方法调用。例如,输入一些文本在文本字段中)
关于Java:调用名称存储在变量中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45959319/