【问题标题】:"return document.readyState" in Jmeter WebDriver Sampler, in JavaScriptJmeter WebDriver Sampler 中的“return document.readyState”,在 JavaScript 中
【发布时间】:2019-02-02 11:04:43
【问题描述】:

我对 Selenium 和 Jmeter 中的 WDS 很陌生,所以请帮助我。 我不能写代码,等到整个页面加载。我发现类似“return document.readyState”的东西,但我不能在我的代码中做到这一点。所以我说 - 我在这方面很环保。

我的代码中有“wait”,但这还不够。

var pkg = JavaImporter(org.openqa.selenium); //WebDriver classes
var support_ui = JavaImporter(org.openqa.selenium.support.ui.WebDriverWait); //WebDriver classes
var wait = new support_ui.WebDriverWait(WDS.browser, 10000);
var conditions = org.openqa.selenium.support.ui.ExpectedConditions;

WDS.sampleResult.sampleStart(); //captures sampler's start time
WDS.sampleResult.getLatency();
WDS.log.info("Sample started");

WDS.browser.get('https://somethingsomething');
wait.until(conditions.elementToBeClickable(pkg.By.xpath("//a[@href='x']")));
WDS.log.info("Sample ended - navigated to somethingsomething");

WDS.sampleResult.sampleEnd();

【问题讨论】:

    标签: javascript selenium-webdriver jmeter selenium-chromedriver jmeter-plugins


    【解决方案1】:

    请注意since JMeter 3.1 it is recommended to use Groovy for scripting,因此您可以考虑切换到 Groovy 并编写普通的 explicit waits - 网络上有大量示例,以防万一您需要更多示例:

    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://example.com')
    WebDriverWait wait = new WebDriverWait(WDS.browser, 15)
    
    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()
    

    如果您必须使用 JavaScript - 仍然可以通过 JavaAdapter 对象调用 Java 函数,示例代码类似于:

    load("nashorn:mozilla_compat.js")
    var wait = new org.openqa.selenium.support.ui.WebDriverWait(WDS.browser, 15)
    WDS.browser.get('http://example.com')
    
    function Invoker(obj) {
        return new JSAdapter() {
            __has__: function(name) {
                return true;
            },
            __get__: function(name) {
                return function() {
                    return obj.invoke(name, arguments);
                }
            }
        }
    }
    
    var r = {
        invoke: function(name, args) {
            return WDS.browser.executeScript("return document.readyState") == 'complete'
        }
    };
    wait.until(new JavaAdapter(org.openqa.selenium.support.ui.ExpectedCondition, Invoker(r)))
    

    更多信息:

    【讨论】:

    • 谢谢 :) 我已经写了这样的东西,它是有效的!当然是在常规中。 ExpectedCondition documentReady = new ExpectedCondition() { @Override public Boolean apply(WebDriver driver) { return WDS.browser.executeScript("return document.readyState") .toString().equalsIgnoreCase("COMPLETE"); } }; wait.until(documentReady)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多