首页 > 解决方案 > 如何在 JMeter 的 WebDriverSampler 的选择器中循环传递变量?

问题描述

我有一组需要在 JMeter 脚本中循环单击的时隙。

对于时隙 id=1 的第一个时隙,WebDriver Sampler 中的代码是:

// 选择时间段:

wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("//div[@id='timeslot1']")));

var Timeslot = WDS.browser.findElement(pkg.By.xpath("//div[@id='timeslot1']"));

时隙.click();

如何从一组变量而不是特定选择器(“//div[@id='timeslot1']”)中传递一个值?

一组变量如下所示:

//div[@id='timeslot1']

//div[@id='timeslot2']

//div[@id='timeslot3']

//div[@id='timeslot4']

//div[@id='timeslot5']

...

//div[@id='timeslotN']

N - 也是一个变量,应该用时隙执行多少次迭代。

使用传递变量而不是选择器循环执行许多请求的最佳方法是什么?

UPD。 我尝试了以下方法:

1)

wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath(WDS.vars.get('//div[@id='timeslot'+N]'))));

var Underwriter_Timeslot = WDS.browser.findElement(pkg.By.xpath(WDS.vars.get('//div[@id='timeslot'+N]')));

(N - 来自 Loop 控制器的外部变量,N 从 1 到 10 顺序发送请求)。

但是,在那种情况下,我有一个错误,即 xpath 为空。

2)

var XPath_Timeslot_Number = WDS.vars.get('//div[@id='timeslot'' + WDS.vars.get('N')]); WDS.vars.put('XPath_Timeslot_Number', XPath_Timeslot_Number); WDS.log.info('XPath_Timeslot_Number 是:' + XPath_Timeslot_Number);

wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("WDS.vars.get('XPath_Timeslot_Number')"))); var Timeslot = WDS.browser.findElement(pkg.By.xpath("WDS.vars.get('XPath_Timeslot_Number')")); 时隙.click();

任何见解,在 xpath 中获取此顺序生成时隙编号的正确选项是什么?

标签: variablesxpathjmeterwebdrivercycle

解决方案


从WebDriver Sampler获取JMeter 变量值的简写是:

var myVar = WDS.vars.get('myVar')

其中WDS.vars代表JMeterVariables类实例,请参阅所有可能函数的文档

因此,您可以执行以下操作:

var i = 0
var n = parseInt(WDS.vars.get('N'))
for (i = 0; i < n; i++) {
  WDS.browser.findElement(pkg.By.xpath(WDS.vars.get('some_prefix' + n));
}

更多信息:WebDriver 采样器:您回答的 10 大问题


推荐阅读