如何在WebDriver Sampler中设置JMeter变量?

时间:2013-11-06 16:27:56

标签: javascript webdriver automated-tests jmeter jmeter-plugins

// I had previously used a CSS/JQuery extractor to get a URL from a page and add it to JMeter vars - accessing it here
var pageURL = "${valueFromJmeterVars}";

// navigate to that url
WDS.browser.get(pageURL); 

// selecting an element
var button = wait.until(pkg.ExpectedConditions.visibilityOfElementLocated(pkg.By.cssSelector(buttonLocator)));                                                                                                                                               

// log desired boolean value to console, so I can confirm is as expected
WDS.log.info('reserveASpotButton:' + reserveASpotButton.isEnabled());

// add my boolean to JMeter vars, so I can access later from beanshell post-processor (where I do my assertions)
vars.put("reserveASpotButtonIsEnabled", reserveASpotButton.isEnabled());

上面的最后一行不起作用。

我可以成功使用CSS / JQuery Extractor将值添加到JMeter变量...

但是我如何从WebDriver Sampler中做同样的事情呢?

4 个答案:

答案 0 :(得分:3)

您可以从WebDriver Sampler中访问JMeter API类,它实现为JSR 223 standard,例如您可以引用JMeter变量(又名vars如下)

在WebDriver采样器中:

var ctx = org.apache.jmeter.threads.JMeterContextService.getContext()
var vars = ctx.getVariables();

vars.put('foo','bar')

现在您的${foo}变量的值为bar

有关更多WDS采样器提示和技巧,请参阅The WebDriver Sampler: Your Top 10 Questions Answered指南。

答案 1 :(得分:1)

我认为你需要首先将它转换为String,因为Using Selenium with JMeter's WebDriver Sampler guide JMeter变量基本上是字符串,你不能把布尔放在那里。

只需替换

vars.put("reserveASpotButtonIsEnabled", reserveASpotButton.isEnabled());

vars.put("reserveASpotButtonIsEnabled", reserveASpotButton.isEnabled().toString());

它应该有效。

答案 2 :(得分:1)

它不起作用,因为'vars'未在WebDriver Sampler中定义,例如BeanShell Sampler。

答案 3 :(得分:0)

没有一种干净的方法可以做到这一点,但这是可能的。您可以在WebDriver采样器中设置响应标头:

WDS.sampleResult.setResponseHeaders(reserveASpotButton.isEnabled())

然后,您可以使用regular expression extractor从响应标头中提取数据。