首页 > 解决方案 > Java、Selenium 和 Method.invoke():获取 NoSuchMethodException

问题描述

目标:创建我自己的方法,该方法调用传递给它的 Selenium 方法并重复该方法指定的次数。

问题:无论我尝试什么,以下代码总是导致:java.lang.NoSuchMethodException: org.openqa.selenium.WebDriver.sendKeys()

讨论:据我所知,sendKeys() 作为 org.openqa.selenium.WebDriver 内部的一种方法存在

问题代码:

方法 objTest = WebDriver.class.getMethod(strMethod, CharSequence.class);

其中 strMethod = sendKeys

代码

public void repeatAction(String strMethod, int numberOfTimes) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    int i = 0;
    Method objTest = WebDriver.class.getMethod(strMethod, CharSequence.class); // PROBLEM CODE - results in NoSuchMethodException
    while (i <= numberOfTimes) {
        objTest.invoke(strMethod, Keys.DOWN);  // I've hardcoded Keys.DOWN for now but will make this flexible later
        i++;
    }
}

我在 main() 中调用我的 repeatAction() 方法:

AutocompleteDropdownPractice objADDP = new AutocompleteDropdownPractice();
objADDP.repeatAction("sendKeys", 5);     // Repeat Selenium WebDriver's sendKeys() 5 times

运行时错误

Exception in thread "main" java.lang.NoSuchMethodException: org.openqa.selenium.WebDriver.sendKeys(java.lang.CharSequence)
at java.base/java.lang.Class.getMethod(Class.java:2109)
at AutocompleteDropdownPractice.repeatKeysAction(AutocompleteDropdownPractice.java:17)
at AutocompleteDropdownPractice.main(AutocompleteDropdownPractice.java:45)

对于我做错了什么以及我应该如何做的任何帮助将不胜感激。

标签: javaseleniumselenium-webdrivernosuchmethoderror

解决方案


如果您查看Selenium API,您会发现没有任何WebDriver类方法作为 sendKeys(),这就是您收到 NoSuchMethodException 的原因。

我认为您正在寻找该org.openqa.selenium.WebElement.sendKeys(java.lang.CharSequence... keysToSend)方法,在您的情况下,您可以按如下方式使用它:

Method objTest = WebElement.class.getMethod(strMethod, CharSequence[].class);

我使用了数组版本CharSequence[].class,而不是CharSequence.class因为该sendKeys方法接受一个数组,CharSequence.class其中可以在API 文档中清楚地看到。


推荐阅读