简体   繁体   English

JavaScript中的Jmeter WebDriver Sampler中的“ return document.readyState”

[英]“return document.readyState” in Jmeter WebDriver Sampler, in JavaScript

I am quite new in Selenium and WDS in Jmeter, so please help me. 我在Selenium中很陌生,在Jmeter中是WDS,所以请帮助我。 I can not write a code, wait until the entire page loads. 我无法编写代码,请等到整个页面加载完毕。 I found something like " return document.readyState ", but I can not do it in my code. 我找到了类似“ return document.readyState ”的内容,但是在我的代码中却做不到。 So I said - I'm quite green in this. 所以我说-我很环保。

I have " wait " in my code but it is not enought. 我的代码中有“ 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();

Be aware that since JMeter 3.1 it is recommended to use Groovy for scripting so you can consider switching to Groovy and writing normal explicit waits - there is a shit ton of examples over the web, just in case if you need one more: 请注意, 从JMeter 3.1开始,建议使用Groovy进行脚本编写,因此您可以考虑切换到Groovy并编写正常的显式等待 -网络上有很多示例,以防万一您需要更多示例:

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()

If you have to go for JavaScript - it is still possible to call Java functions via ie JavaAdapter object, example code would be something like: 如果您必须使用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)))

More information: 更多信息:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM