【发布时间】:2018-02-24 17:39:40
【问题描述】:
带有 selenium 独立服务器的 webdriverio,没有 wdio。
单击链接以打开新选项卡。 我可以看到新标签打开了,但是新标签上找不到任何元素,好像新标签从未存在过一样。
第一个标签和新标签的标题:
C:\Users\...\test>node switchtab.js
main window: CDwindow-(D77C1A0428E3E5717A1DF2473274B905)
Title is: WebdriverIO - WebDriver bindings for Node.js
new window: CDwindow-(D77C1A0428E3E5717A1DF2473274B905)
Title is: WebdriverIO - WebDriver bindings for Node.js
switchTab: CDwindow-(BE8C6F13723E588E3E39C7C21C02C290)
current window: CDwindow-(D77C1A0428E3E5717A1DF2473274B905)
Title is: WebdriverIO - WebDriver bindings for Node.js
如您所见,它总是获取第一个标签 ID。因此无法找到新选项卡上的任何元素。
我做错了什么?如何将新标签设为当前标签?即使我看到新标签成为活动标签,但显然代码不这么认为。
这里是示例代码sn-p:
var webdriverio = require('webdriverio');
var options = { desiredCapabilities: { browserName: 'chrome' } };
var client = webdriverio.remote(options);
var mainW, newW, newW1;
client
.init()
.url('http://webdriver.io/')
.getCurrentTabId().then(function (handle) {
mainW = handle;
console.log('main window: ' + mainW);
})
.getTitle().then(function(title) {
console.log('Title is: ' + title);
})
.waitForExist('a[href="http://try.learnwebdriverio.com"]')
.click('a[href="http://try.learnwebdriverio.com"]')
.pause(5000)
.getCurrentTabId().then(function (handle) {
newW = handle;
console.log('new window: ' + newW);
})
.getTitle().then(function(title) {
console.log('Title is: ' + title);
})
.getTabIds().then(function (handle) {
console.log('switchTab: ' + handle[1]);
newW1 = handle[1];
})
.switchTab(newW1)
.pause(5000)
.getCurrentTabId().then(function (handle) {
console.log('current window: ' + handle);
})
.getTitle().then(function(title) {
console.log('Title is: ' + title);
.end();
switchTab() 无济于事。在.switchTab(newW1) 之后,它仍然获得第一个选项卡。更糟糕的是,我看到它实际上会切换到第一个标签。
【问题讨论】:
-
您是否尝试过使用webdriver.io/api/window/switchTab.html手动切换到新标签?
-
我确实想尝试,但我无法获得它的标签 ID。当我使用不带参数的 .switchTab() 时,它会切换回第一个选项卡。
-
当您调用
getTabIds()时,您确定新标签位于索引1 处吗?您可能需要遍历列表并选择不等于当前选项卡的那个。 -
是的,我确定,因为索引 0 与第一个选项卡相同,并且只有 2 个选项卡。所以它必须是索引 1。
标签: selenium-chromedriver webdriver-io