硒';s JavascriptExecutor在JMeter的JSR223采样器中不工作

硒';s JavascriptExecutor在JMeter的JSR223采样器中不工作,javascript,selenium,jmeter,performance-testing,blazemeter,Javascript,Selenium,Jmeter,Performance Testing,Blazemeter,我想实时测量网页的性能。因此,获得了第一个选择的JMeter与硒 我能够使用Java中的JSR223采样器进行一些导航和单击操作 但是,在等待所有JQuery和DOM就绪状态时,我在Javascript Executor(org.openqa.selenium.JavascriptExecutor)中没有这样做。下面是我的等待语句代码 setStrictJava(false); /* ---some block of code--- */ while(true){ Boolean

我想实时测量网页的性能。因此,获得了第一个选择的JMeter与硒

我能够使用Java中的JSR223采样器进行一些导航和单击操作

但是,在等待所有JQuery和DOM就绪状态时,我在Javascript Executor(org.openqa.selenium.JavascriptExecutor)中没有这样做。下面是我的等待语句代码

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

您需要使用方法
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"));

您正在使用不存在的静态引用调用该方法。您应该创建对象并调用
executeScript
方法:

JavascriptExecutor js = (JavascriptExecutor) driver;  
Boolean isJsLoaded = js.executeScript("return document.readyState;").toString().equals("complete"); 
  • 首先要转向语言,
  • 其次,您可以在WebDriver采样器中使用normal,如下所示:

    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()
    
    import org.openqa.selenium.WebDriver
    导入org.openqa.selenium.support.ui.ExpectedCondition
    导入org.openqa.selenium.support.ui.WebDriverWait
    WDS.sampleResult.sampleStart()
    WDS.browser.get('http://jmeter-plugins.org')
    WebDriverWait wait=新建WebDriverWait(WDS.browser,5)
    ExpectedCondition documentReady=新的ExpectedCondition(){
    @凌驾
    公共布尔应用(WebDriver驱动程序){
    return WDS.browser.executeScript(“return document.readyState”)
    .toString().equalsIgnoreCase(“完成”);
    }
    };
    等待。直到(文档准备就绪)
    WDS.sampleResult.sampleEnd()
    

  • 是的,我已经加了。谢谢你的评论。我已经试过这个了。在本例中,下面是错误:
    方法调用中的错误:在类'org.openqa.selenium.chrome.ChromeDriver'中找不到方法executeScript(java.lang.String)
    ,但是,正如您在上述错误中所观察到的,引用的导入语句是方法调用中的
    错误:静态方法executeScript(java.lang.String)在类“org.openqa.selenium.JavascriptExecutor”中找不到
    。所引用的进口声明是错误的。这让我挣扎。非常感谢您的帮助。请尝试
    js.executeScript(“return document.readyState;”,new Object[]{})
    谢谢您的评论。仅显示相同的错误。