首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:使用存储在变量中的名称调用方法

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

Stack Overflow用户
提问于 2017-08-30 19:33:32
回答 4查看 4.3K关注 0票数 16

我有一个要求:

代码语言:javascript
复制
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`.

那么,有没有可能像这样:

代码语言:javascript
复制
driver.findElement(By.id("id1")).<something to call click()>

我已经看过Java中的反射,但根据我的需求,它看起来很复杂。任何指点都会很有帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-30 19:40:08

最简单的方法是使用反射:

代码语言:javascript
复制
String command = "click";
WebElement element = driver.findElement(By.id("id1"));

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

如果您还想使用反射调用By.id,那么您可以这样做:

代码语言:javascript
复制
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);
票数 11
EN

Stack Overflow用户

发布于 2017-08-30 19:39:34

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

合适的类型不是String。改为使用Consumer<WebElement> (或driver.findElement()返回的任何类型):

代码语言:javascript
复制
Consumer<WebElement> command = e -> e.click();

// ...

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

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

票数 22
EN

Stack Overflow用户

发布于 2017-08-30 19:42:12

在设计方面(也许可以肯定地进一步优化和抽象),您可以定义一个Enum,让我们将其命名为Action

代码语言:javascript
复制
public enum Action {
 CLICK,
 SENDKEY,
 etc
}

然后在你的代码中这样做:

代码语言:javascript
复制
Action action = <input>;
// find the element
WebElement element = driver.findElement(By.id("id1"));
switch(action) {
    case CLICK:
        element.click();
        break;
    case SENDKEY:
        element.sendKey();
        break;
    ...
    default:
        System.out.println("Undefined action");
        break;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45959319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档