java - 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)
对于我做错了什么以及我应该如何做的任何帮助将不胜感激。
解决方案
如果您查看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 文档中清楚地看到。
推荐阅读
- android - RxJava blockingFirst/Single 在 JUnit 5 Retrofit 测试中返回错误异常
- css - 未检测到 Safari 13 CSS 变量
- python - 我需要使用 python json 解析将我的 2 个列表单元到另一个 1
- python-3.x - Python3 嵌套字典打印
- python - 我不能用海龟模块在 python 中做一个桨
- amazon-web-services - 无法在 AWS 上侦听端口 443
- javascript - 如何使用订阅 Observable 在 Angular 中执行查找
- python - Pyspark - 从已经具有(错误)模式的 Parquet 文件中读取时,如何强制 spark 再次推断模式?
- javascript - 如何使用 js 或 jquery 将图像的“src”标签修改为 data-src 以启用延迟加载图像
- java - 在静态方法JAVA中调用非静态方法