selenium - 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,然后再继续?
解决方案
更仔细地阅读 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()是一个函数,因此它需要有尾括号。
推荐阅读
- rendezvous-hash - 集合散列库
- algorithm - 如何从一组重叠的圆中计算出一组多边形?
- python - Flask 如何通过连接的客户端分发 RabbitMQ 消息
- r - tfdatasets上的R keras模型,重复列
- gcc - MinGW32 无法配置源:“未定义对‘信号’等的引用
- java - 如何在JAVA中将多个sideinputs传递和引用到DoFn
- python - 如何在 sparql 中查询多个图?
- watchkit - 单击按钮时如何打开 Apple Watch 设置?
- powershell - 使用 PNP Powershell 更新 SharePoint Online 文档库中特定文件夹中项目的元数据属性
- thingsboard - 我可以在 thingsboard 上的实体管理表中有遥测数据吗