如何处理弹出窗口(WebdriverIO)

时间:2014-11-16 04:02:11

标签: windows selenium popup popupwindow webdriver-io

我对自动化测试非常陌生,目前我完全陷入了以下问题:

我打开了一个网页(第一个窗口) 在同一测试中,我调用.newWindow(第二个窗口)并在该窗口中执行一些操作。最后一个操作将打开新的弹出窗口(弹出窗口)。 我需要的是将焦点放在弹出窗口上。

根据WebdriverIO API我可以使用.switchTab http://webdriver.io/api/window/switchTab.html 但是为了能够切换到弹出窗口,我必须指出句柄,但我不明白如何获得弹出窗口的句柄:(

这是我的代码:

//this is the part where I have already second window open
it('should open email letter', function(done) {
client
.pause(2000)
.clickAndWait('[title="Password restore"]', 4000)
.clickAndWait('[title="Restore password"]', 7000) //this is the part where popup window opens
.pause(2000)
.windowHandles(function(err,res){
 console.log(res, handles)
 }) // I have got three handles but i dont know how to use them now
 .........

java中有很多例子,但我找不到适合我语言的东西。 请原谅我的愚蠢,我真的是一个非常初学者,如果有人能向我解释,我将不胜感激。

提前多多感谢!

2 个答案:

答案 0 :(得分:3)

我们不使用getCurrentTabId来记住当前打开窗口的句柄吗?

例如:

var main, popup; //your window handles

client
  .getCurrentTabId(function (err, handle) {
     main = handle;
  })
  .newWindow('http://localhost:9001/') //you are on popup window
  .getCurrentTabId(function (err, handle) {
     popup = handle;
  })
  .switchTab(main) //you are back to main window
  .switchTab(popup) //you are on popup again
  .close(popup) //extra bonus!

答案 1 :(得分:0)

我注意到你说过"最后一个动作打开了新的弹出窗口(弹出窗口)。我需要的是将焦点放在弹出窗口上。"

我有这个问题。但点击登录facebook时,新窗口打开了。这导致查找新窗口句柄的问题,因为我无法使用r1 ~ r2。使用社交登录时,API密钥和所有排序都将作为参数添加。所以一个人无法控制

为了解决这个问题,我将每个窗口ID注册为已打开的。

我的功能的第一个背景步骤是.newWindow('http://localhost:9001/')

在步骤中,您可以使用Given I open the url "/a.html"

将空数组设置为变量windowID

所以我的步骤文件看起来像这样

let windowID = []

在点击Facebook按钮后的步骤中,您可以检查所有打开的窗口ID并删除与const url = 'http://localhost:8080' let windowID = [] this.Given(/^I open the url "([^"]*)"$/, (path) => { browser .url(url + path) console.log(`# Navigating to ${url + path}`) expect(browser.getUrl()).toEqual(url + path) windowID.main = browser.getTabIds() });

匹配的ID
windowID.main
  

请注意,我将凭据添加为环境变量。这是一个好主意,您不想将您的个人凭据提交给代码库。人们可能会很清楚地思考,但你可能不会,谁知道。

你几年前就回答了你的问题,但我在试图找到一个解决方案时首先找到了这个帖子,所以这似乎是一个明智的选择。