我想实时衡量网页的效果。因此,获得了Jlenter与Selenium的第一个选项。
我能够使用Java中的JSR223采样器进行一些导航和点击操作。
但是,在等待所有JQuery和DOM就绪状态时,我无法在Javascript Executor(org.openqa.selenium.JavascriptExecutor)中执行。下面是我的Wait语句代码。
setStrictJava(false);
/*
---some block of code---
*/
while(true){
Boolean isAjaxCompletes = (Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.active == 0;");
Boolean isJsLoaded = ((JavascriptExecutor)driver).executeScript("return document.readyState;").toString().equals("complete");
if(isAjaxCompletes && isJsLoaded){
break;
}
}
我收到以下错误:
2018-04-02 18:39:33,794 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: Sourced file: inline evaluation of: ``import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; impor . . . '' : Error in method invocation: Static method executeScript( java.lang.String ) not found in class'org.openqa.selenium.JavascriptExecutor' : at Line: 36 :
in file: inline evaluation of: ``import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; impor . . . '' : JavascriptExecutor .executeScript ( "return jQuery.active == 0;" )
in inline evaluation of: ``import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; impor . . . '' at line number 36
javax.script.ScriptException: Sourced file: inline evaluation of: ``import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; impor . . . '' : Error in method invocation: Static method executeScript( java.lang.String ) not found in class'org.openqa.selenium.JavascriptExecutor' : at Line: 36 : in file: inline evaluation of: ``import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; impor . . . '' : JavascriptExecutor .executeScript ( "return jQuery.active == 0;" )
in inline evaluation of: ``import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; impor . . . '' at line number 36
at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:93) ~[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_151]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:69) [ApacheJMeter_java.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:490) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:416) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250) [ApacheJMeter_core.jar:4.0 r1823414]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_151]
请帮我解决这个问题。
JMeter版本:4.0
插件自动下载selenium版本:2.52.0
Java:1.8,更新151
答案 0 :(得分:1)
您正在使用静态引用调用方法,该方法不存在。您应该创建JavascriptExecutor对象并调用executeScript
方法:
JavascriptExecutor js = (JavascriptExecutor) driver;
Boolean isJsLoaded = js.executeScript("return document.readyState;").toString().equals("complete");
答案 1 :(得分:0)
您需要使用equals()
方法,如下所示:
import org.openqa.selenium.JavascriptExecutor;
Boolean isAjaxCompletes = (Boolean) ((JavascriptExecutor) webdriver).executeScript("return jQuery.active").equals("0"));
Boolean isJsLoaded = ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete"));
答案 2 :(得分:0)
其次,您可以在WebDriver Sampler中使用普通ExplicitWait,如下所示:
import org.openqa.selenium.WebDriver
import org.openqa.selenium.support.ui.ExpectedCondition
import org.openqa.selenium.support.ui.WebDriverWait
WDS.sampleResult.sampleStart()
WDS.browser.get('http://jmeter-plugins.org')
WebDriverWait wait = new WebDriverWait(WDS.browser, 5)
ExpectedCondition<Boolean> documentReady = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return WDS.browser.executeScript("return document.readyState")
.toString().equalsIgnoreCase("COMPLETE");
}
};
wait.until(documentReady)
WDS.sampleResult.sampleEnd()