当按钮被禁用时,如何跳出while循环?



我使用WebDriver采样器编写了一个Selenium Java脚本-在下面的脚本

var x = 0
var nextt = WDS.browser.findElement(pkg.By.xpath("//button[contains(@class,'btn btn-sm btn-light border ml-3')]"))
var nextisEnb = nextt.isEnabled()
while (true) {
if (nextisEnb == true) {
//if(next.isEnabled()){
++x
//java.lang.Thread.sleep(2000);
var wait9 = new org.openqa.selenium.support.ui.WebDriverWait(WDS.browser, 9000)
wait9.until(org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable(pkg.By.xpath("//button[contains(@class,'btn btn-sm btn-light border ml-3')]")))
nextt.click();
WDS.log.info('btn50-clicked ' + x + 'isEnabled=' + nextisEnb)
//break
if (nextisEnb == false) {
break
}
}
}

当next按钮被禁用时,它仍然不会打破循环。它仍然在Jmeter中运行。那我们怎么才能知道呢?

我也使用下面的代码得到同样的问题

var next = WDS.browser.findElement(pkg.By.xpath("//button[contains(@class,'btn btn-sm btn-light border ml-3')]"))
while (next.isEnabled()) {
java.lang.Thread.sleep(2000);
var wait9 = new org.openqa.selenium.support.ui.WebDriverWait(WDS.browser, 9000)
wait9.until(org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable(pkg.By.xpath("//button[contains(@class,'btn btn-sm btn-light border ml-3')]")))
next.click();
WDS.log.info('btn50-400clicked')
}
WDS.log.info('btn2clicked')
//java.lang.Thread.sleep(3000);
if (!next.isEnabled()) {
WDS.log.info('Next button disabled')
}

如何解决?

总是在查询" next "的初始状态按钮,你需要"查找"它又一次得到了"新鲜"。单击后的状态。我的期望是,当你点击"下一步"时,按钮的DOM被刷新,按钮有了新的属性,并且您已经将其先前的状态存储到一个全局变量中。

next.click()
WDS.log.info('btn50-400clicked')
//here the page has refreshed and you need to "find" the button once again
next = WDS.browser.findElement(pkg.By.xpath("//button[contains(@class,'btn btn-sm btn-light border ml-3')]"))
if (!next().isEnabled() {
break
}

如果出了什么问题,你可以截图:

var screenshot = WDS.browser.getScreenshotAs(pkg.OutputType.FILE)
screenshot.renameTo(new java.io.File('screenshot.png'))

或将页面的当前HTML源代码打印到JMeter.log文件,如:

WDS.log.info(WDS.browser.getPageSource())

可以直观地或通过检查其HTML定义来检查按钮状态。

更多信息:The WebDriver Sampler: Your Top 10 Questions answer

最新更新