«return document.readyState» в Jmeter WebDriver Sampler, в JavaScript - PullRequest
0 голосов
/ 02 февраля 2019

Я новичок в Selenium и WDS в Jmeter, поэтому, пожалуйста, помогите мне.Я не могу написать код, подождите, пока загрузится вся страница.Я нашел что-то вроде "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();

1 Ответ

0 голосов
/ 04 февраля 2019

Имейте в виду, что , начиная с 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()

Если вам нужно перейти на JavaScript - все еще можно вызывать функции Java через, например, JavaAdapter объект, пример кода будет выглядеть примерно так:

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

Дополнительная информация:

...