首页 > 解决方案 > JMeter 的 WebDriver 的 Javascript 解释器无法访问第二个选项卡窗口

问题描述

我正在尝试使用以下代码运行 WebDriver Sampler:

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, 5000);

WDS.sampleResult.sampleStart(); //captures sampler's start time
WDS.sampleResult.getLatency();
WDS.log.info("Sample started");

// Navigate to home
...

// Login
...

// Navigate to Messages
var messagesButton = WDS.browser.findElement(pkg.By.id('chat-button')); // saves the messages button into messagesButton
messagesButton.click(); // clicks the messages button which opens up link in a new tab
WDS.log.info("Clicked Messages Button");

var tabs = WDS.browser.getWindowHandles();
var tab = WDS.browser.getWindowHandle();

WDS.log.info("All Tabs: " + tabs);
WDS.log.info("Current Tab: " + tab);
WDS.log.info("Next Tab: " + tabs[tabs.size() - 1]);

WDS.browser.switchTo.window(tabs[tabs.size() - 1]);

// Load General Channel
var generalChannelButton = WDS.browser.findElement(pkg.By.linkText('general')); // saves the general channels button into generalChannelButton
messagesButton.click(); // clicks the messages button

WDS.sampleResult.sampleEnd();

在此,在我登录用户后,我指示他们单击消息按钮。当他们单击此按钮时,会打开一个新选项卡并运行自动 OAuth 流程。我想要测试做的是导航到打开的新选项卡,然后等待 OAuth 完全处理并发生最终重定向。一旦发生这种情况,我想点击一个按钮。

但是,现在当我转到通过消息按钮打开的选项卡时,我被卡住了。以下是打印出来的内容:

2019-08-13 15:17:15,480 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2019-08-13 15:17:15,484 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2019-08-13 15:17:15,488 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, *local*)
2019-08-13 15:17:15,834 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group
2019-08-13 15:17:15,834 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group Thread Group.
2019-08-13 15:17:15,834 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
2019-08-13 15:17:15,834 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false
2019-08-13 15:17:15,836 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2019-08-13 15:17:15,837 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2019-08-13 15:17:15,839 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2019-08-13 15:17:17,755 INFO c.g.j.p.w.s.WebDriverSampler: Sample started
2019-08-13 15:17:25,007 INFO c.g.j.p.w.s.WebDriverSampler: Sample ended - navigated to yt-portal.raccoongang.com
2019-08-13 15:17:25,180 INFO c.g.j.p.w.s.WebDriverSampler: Entered Username
2019-08-13 15:17:25,285 INFO c.g.j.p.w.s.WebDriverSampler: Entered Password
2019-08-13 15:17:42,159 INFO c.g.j.p.w.s.WebDriverSampler: Submitted Login
2019-08-13 15:17:42,303 INFO c.g.j.p.w.s.WebDriverSampler: Clicked Messages Button
2019-08-13 15:17:42,314 INFO c.g.j.p.w.s.WebDriverSampler: All Tabs: [CDwindow-2071965AEF3647D3F81E3C45E722803F, CDwindow-680DEFAD39924A4A2FE9BF6C6CCF907F]
2019-08-13 15:17:42,315 INFO c.g.j.p.w.s.WebDriverSampler: Current Tab: CDwindow-2071965AEF3647D3F81E3C45E722803F
2019-08-13 15:17:42,316 INFO c.g.j.p.w.s.WebDriverSampler: Next Tab: null
2019-08-13 15:17:42,317 ERROR c.g.j.p.w.s.WebDriverSampler: TypeError: WDS.browser.switchTo.window is not a function in <eval> at line number 39
2019-08-13 15:17:42,318 INFO o.a.j.t.JMeterThread: Thread is done: Thread Group 1-1
2019-08-13 15:17:42,318 INFO o.a.j.t.JMeterThread: Thread finished: Thread Group 1-1
2019-08-13 15:17:42,543 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
2019-08-13 15:17:42,544 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, *local*)

如您所见,All Tabs打印一个带有两个选项卡的数组,但是当我尝试访问索引 1 处的选项卡时,它打印出 null ...

如何访问第二个选项卡并等待它加载某个重定向 url,然后再继续?

标签: seleniumselenium-webdriverjmeter

解决方案


更仔细地阅读 jmeter.log 文件:

TypeError: WDS.browser.switchTo.window is not a function in <eval> at line number 39

我的期望是您需要替换此行:

WDS.browser.switchTo.window(tabs[tabs.size() - 1]);

有了这个:

WDS.browser.switchTo().window(tabs[tabs.size() - 1]);

因为switchTo()是一个函数,因此它需要有尾括号。

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


推荐阅读