JSR233 采样器与 Java 配合使用以与 Selenium Webdriver 配合使用(javax.script.ScriptException:在文件中:内联评估)
2019-01-28
2166
尝试使用 JSR233 采样器在 Jmeter 中运行 Selenium Webdriver 脚本。该脚本在 Eclipse IDE 中运行良好,但在 Jmeter 中出现以下错误。
ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler,
message: javax.script.ScriptException: In file: inline evaluation of:
``import java.util.HashMap; import org.openqa.selenium.WebDriver; import
org.openq . . . '' Encountered "," at line 28, column 25.
in inline evaluation of: ``import java.util.HashMap; import
org.openqa.selenium.WebDriver; import org.openq . . . '' at line number 28
javax.script.ScriptException: In file: inline evaluation of: ``import
java.util.HashMap; import org.openqa.selenium.WebDriver; import org.openq .
. . '' Encountered "," at line 28, column 25.
in inline evaluation of: ``import java.util.HashMap; import
org.openqa.selenium.WebDriver; import org.openq . . . '' at line number 28
at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:82) ~[bsh-
2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.engine.BshScriptEngine.eval(BshScriptEngine.java:46) ~[bsh-
2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at javax.script.AbstractScriptEngine.eval(Unknown Source) ~[?:1.8.0_181]
以下是尝试执行的脚本:
import java.util.HashMap;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium;
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
String downloadFilepath = "D:/MyDeskDownload";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
// chromePrefs.put("profile.default_content_settings.popups", 0);
// chromePrefs.put("download.default_directory", downloadFilepath);
// chromePrefs.put("safebrowsing.enabled", "true");
ChromeOptions options1 = new ChromeOptions();
options1.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options1);
WebDriver driver = new ChromeDriver(cap);
driver.setJavaScriptEnabled(true);
driver.get("http://google.com/");
我已通过以下参考资料获取上述脚本:
我们可以实现启动浏览器并使用 JavaScript 通过 Selenium Webdriver 配置采样器执行操作,但是由于我们无法使用 WDS 设置功能,因此我们尝试在 JSR233 中实现相同的功能。
2个回答
Beanshell 不支持 钻石操作符 ,如果您确实想继续使用 Beanshell - 请将此行:
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
更改为此行
HashMap chromePrefs = new HashMap();
请注意 从 JMeter 版本 3.1 开始,建议使用 JSR223 测试元素和 Groovy 语言进行脚本编写 ,原因如下:
- Groovy 支持所有现代 Java语言功能
- Groovy 比标准 Java SDK 提供了很多增强功能
- Groovy 提供的性能比 Beanshell 好得多
因此请考虑迁移到 Groovy,我的预期是不需要进行任何更改(您可能需要将 lambda 重写为闭包,但开销会很小)
Dmitri T
2019-01-29