问题描述
我有一组需要在 JMeter 脚本中循环单击的时间段。
对于第一个 timeslot,timeslot id=1,WebDriver Sampler 中的代码是:
//选择时间段:
wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("//div[@id='timeslot1']")));
var 时间段 = WDS.browser.findElement(pkg.By.xpath("//div[@id='timeslot1']"));
Timeslot.click();
如何从一组变量而不是特定选择器(“//div[@id='timeslot1']”)传递值?
一组变量看起来像:
//div[@id='timeslot1']
//div[@id='timeslot2']
//div[@id='timeslot3']
//div[@id='timeslot4']
//div[@id='timeslot5']
...
//div[@id='timeslotN']
N - 也是一个变量,应该用时隙执行多少迭代。
通过传递变量而不是选择器来循环执行许多请求的最佳方法是什么?
更新。 我尝试了以下方法:
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')")); Timeslot.click();
任何见解,在 xpath 中按顺序生成时隙编号的正确选项是什么?
解决方法
从 JMeter Variable 获取 WebDriver Sampler 值的简写是:
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));
}