【发布时间】:2018-08-29 13:39:56
【问题描述】:
我正在使用 Jmeter 中的 javascript 编写硒测试。当我单击网站上的链接时,默认情况下它会在新选项卡中打开。自动浏览器甚至切换到这个新标签。但是,似乎 selenium 没有切换到新标签。当我在单击链接后打印 body 元素的内部 HTML(由 xpath //body 获得)时,我会返回第一个选项卡的源代码,而不是第二个选项卡。
当我尝试等待下一页上的任何元素时(例如,等待//div[@id="my-div-on-second-page-only"]),我得到一个超时,说该元素从未被找到(在我看到页面完成加载很久之后) .
我确实遇到了this question,但它是针对 python 的,我也很难理解接受的答案。
更新
我的标签切换代码目前如下所示:
// Switch tabs
var tabs = WDS.browser.getWindowHandles();
var tab = WDS.browser.getWindowHandle();
WDS.log.info("Tabs: " + tabs + " current: " + tab); // Output below
// Assume always there are only two tabs
for (t in tabs)
{
WDS.log.info("Checking tab " + t);
if (t != tab)
{
WDS.log.info("Switching to " + t);
WDS.browser.switchTo().window(t);
break;
}
}
标有// Output below 的行的输出是:
Tabs: [CDwindow-A83928D86BA4F6F46C5D7F4B63B674A5, CDwindow-177CF406C98C28DF4AF5E7EC3228B896] current: CDwindow-A83928D86BA4F6F46C5D7F4B63B674A5
我什至没有进入 for/in 循环。我曾尝试使用tabs[index]、tabs.get(0); 和tabs.iterator.next(); 进行切换,但都没有奏效。我整天都在网上搜索WDS.browser.getWindowHandles();返回的数据类型的一些信息,但似乎找不到。
更新 2
我最终切换到了 Java 解释器。所提出的解决方案,即使是 javascript 中的解决方案,都没有奏效。我怀疑javascript解释器本身存在问题。我将保留这个问题,以防有人愿意提供经过测试并在 Jmeter webdriver 扩展中工作的解决方案以供将来了解。
以下是我的工作 Java 代码。它使用 Matias Dominguez 的示例,假设tabs 中的最后一个条目是新选项卡。虽然我发现 Mike Cook 的解决方案似乎是一般解决方案的最佳解决方案,但 Matias 的解决方案足以解决我的问题。
// Switch tabs
ArrayList tabs = new ArrayList(); // Jmeter interpreter uses <String> by default
tabs.addAll(WDS.browser.getWindowHandles());
String tab = WDS.browser.getWindowHandle();
WDS.log.info("Tabs: " + tabs + " current: " + tab + " Size of tabs: " + tabs.size());
WDS.browser.switchTo().window(tabs.get(tabs.size() - 1));
WDS.log.info("Tabs switched successfully");
【问题讨论】:
-
我在谷歌上找到了这个:softpost.org/selenium-with-node-js/…
-
虽然窗口可能在视觉上聚焦在新选项卡上,但您的驱动程序仍在原始窗口句柄的上下文中工作。这可能因浏览器而异,但您通常必须在您想要与新句柄交互时明确指示驱动程序切换窗口句柄。
-
你能用你的代码试验更新问题吗?
-
不是重复的。这是专门关于 javascript 的。那是关于java的。
标签: javascript selenium jmeter uitest