masalibの日記

システム開発、運用と猫の写真ブログです

puppeteerでサブウィンドウから戻れない・・・

puppeteerでテストコードを記載しています
2018/04/26の時点はv1.3です

puppeteerとは
qiita.com


サブウィンドウとは
JavaScript/ウィンドウ/サブウィンドウを開く(クリック時) - TAG index

レガシーなシステムなのでサブウィンドウを使って選択させるような仕組みが多々あります
サブウィンドウを開いた時に
ブラウザのtargetcreatedイベントが発生するので
そちらでサブウィンドウの動作を記述するのですが
サブウィンドウから親ウィンドウに戻ることができないです

サブウィンドウを開いた時の処理

	//ブラウザのタブが開くと実行される所
   browser.on('targetcreated', async (target) => {
        console.log(`Created target type ${target.type()} url ${target.url()}`);
        if (target.url() == subwindowurl){
            var page2 = await target.page();
            var inputElement2 = await page2.$('body > center > form > table > tbody > tr > td:nth-child(4) > input[type="button"]');
            await inputElement2.click();	
            page2.close();
            return;
		} else if (target.type() !== 'page') {
            return;
        } else {
            var page = await target.page();
        }
    });

サブウィンドウを閉じた時の処理

	//ブラウザのタブ閉じられる時のイベント
   browser.on('targetdestroyed', async (target) => {
        console.log(`targetdestroyed target type ${target.type()} url ${target.url()}`);
        if (target.url() == subwindowurl){
			console.log('testtargetdestroyed');
			pages = await browser.pages();	
			pages.forEach(function (pageobj) {
				if (pageobj.url() == parrentURL){
					console.log(pageobj.url() );
					//ここが動かない
					// var inputElement2 = await pageobj.$('body > center > form > table > tbody > tr > td:nth-child(4) > input[type="button"]');
					// await pageobj.click();	
				}
			});
            return;
		} else if (target.type() !== 'page') {
            return;
        } else {
            return;
        }
    });


ここでハマるわけにはいかないので
時間をまって逃げた

	await inputElement.click();	//
	console.log("popup start");

	await page.waitFor(4000);
	console.log("popupがたぶん終了しているので作成開始" );
	var inputElement = await page.$('body > center > form > table > tbody > tr:nth-child(7) > th > input[type="button"]:nth-child(1)');
	await inputElement.click();
	console.log("作成終了" );


あああ・・・イケてない