FILEMAKER プラグイン など (助け合い)フォーラムにようこそ!
何方でも、ご質問・ご回答お願いします。
※2024/01/31 までに登録された方は、登録時のパスワードが使えません。
パスワードを再発行してください。
ページ: 1
いつもお世話になります。
よろしくお願い申し上げます。
環境FM13 WIN7 クローム
現在、楽天のRMSから伝票を印刷したいと考えております。
顧客を選択した後、「PDF」を開くボタンを押すと、新しいウインドウで印刷画面が表示されます。
ここでご教授いただきたい内容は次のとおりです。
1、新しいウインドウにハンドルを移したい。
2、PDFから印刷をしたい。
3、元のRMSのウインドウに戻り、処理を続けたい。
私が考えている内容を記載いたします。
1、新しいウインドウにハンドルを移したい。
【言語:Ruby】
window = driver.window_handles.last # ウィンドウ情報を取得
driver.switch_to.window(window) # 遷移先のウィンドウに遷移元のウィンドウ情報を移す
【言語:C#】
var handle = Process.GetCurrentProcess().MainWindowHandle;
var owner = Control.FromHandle(handle);
調べてみたのですが、私には難しく正しい記述がわかりません。
正しい記述をご教授いただけますと、助かります。
2、PDFから印刷をしたい。
こちらの問題としてはウインドウがPDFに移った場合、アイコンが
表示されていないので、印刷ボタンが押せるかがわりません。
私なりに記述した内容を記載いたします。
【HTML】
<paper-icon-button id="print" icon="cr:print" role="button" tabindex="0" aria-disabled="false" title="印刷" aria-label="印刷">
</paper-icon-button>
【selenium側】
$elements = $driver.FindElementsById('print');
$elements[0].Click();
もし、印刷ボタンが表示されていないと、印刷ができない場合は
表示させる記述も教えていただけますと大変助かります。
3、元のRMSのウインドウに戻り、処理を続けたい。
こちらも調べましたが、言語が違う記述ですみません。
【Java】
String wid = driver.getWindowHandle(); #元のWindowHandleを取得しておく
driver.switchTo().window("ここに新しいWindow名"); #別Window切り替え
driver.switchTo().window(wid); #元のWindowへ切り替え
ご質問させていただいた内容では「元のウインドウ」→「新しいウインドウ」→「元のウインドウ」を希望しておりますが
もし、「元のウインドウ」だけで済むようであれば、その方法でもよいかと考えております。
今回は質問内容が多くて、申し訳ございません。
ご教授いただけますと幸いです。
よろしくお願い申し上げます。
オフライン
#selenium
PowerShellの場合は、以下のような感じになります。
新しいウインドウを開いた後、
$wid =$driver.WindowHandles; <#ウインドウにハンドルを取得#>
$newWindow=$driver.SwitchTo().Window($wid[-1]); <#最後に開いたウインドウに移動#>
$newWindow=$driver.SwitchTo().Window($wid[0]); <#元のウインドウに移動#>
【selenium側】
$elements = $driver.FindElementsById('print');
$elements[0].Click();
$driver.FindElementsById('print');
複数形の場合は、以下のようにします。
$driver.FindElementsById('print')[0];
通常、id は、ひとつなので、単数形で大丈夫です。
$driver.FindElementById('print');
オフライン
お世話になります。
早急なご回答ありがとうございます。
また、詳しくご説明をいただきありがとうございます。
下記のように記述してみました。
$wid =$driver.WindowHandles; <#ウインドウにハンドルを取得#>
$newWindow=$driver.SwitchTo().Window($wid[-1]); <#最後に開いたウインドウに移動#>
$elements = $driver.FindElementById('print');<#印刷ボタンをクリック#>
$elements[0].Click();
$newWindow=$driver.SwitchTo().Window($wid[0]); <#最初のウインドウに移動#>
ウインドウの移動は成功したのですが、印刷ボタンがクリックされませんでした。
印刷ボタンの部分は下記のように試してみました。
$elements = $driver.FindElementById('print');
$elements[0].Submit();
$elements = $newWindow.FindElementById('print');
$elements[0].Click();
$elements = $newWindow.FindElementById('print');
$elements[0].Submit();
$elements = $driver.FindElementById('print');
$hack =$elements.LocationOnScreenOnceScrolledIntoView;
$Y=$hack[0].Y;
$driver.ExecuteScript(\"window.scrollTo(0, $Y);\");
$elements[0].Click();
いづれも、クリックがされませんでした。
何かハンドルをつかんだ状態にしていないとクリックされないのでしょうか?
プリントのアイコンが見え隠れする状態がクリックできない原因でしょうか?
大変お手数となりますが、ご教授のほどお願い申し上げます。
オフライン
ブラウザでPDFを表示した状態だったんですね。キチンと把握出来ていませんでした。
$driver.ExecuteScript('window.print();');
でプリントプレビューを表示出来ます。
プリントプレビューは、新しいウインドウハンドルになるようなので、
ターゲットを新しいウインドウハンドルにして
$element = $driver.FindElement([OpenQA.Selenium.By]::xpath('//button[text()="印刷"]'));
$element.Click();
とすれば、印刷実行まで処理出来ます。
ブラウザでPDFを表示した状態から以下を実行。
$driver.ExecuteScript('window.print();');
Start-Sleep -s 1;
$wid =$driver.WindowHandles; <#ウインドウにハンドルを取得#>
$newWindow=$driver.SwitchTo().Window($wid[-1]); <#最後に開いたウインドウに移動#>
$element = $driver.FindElement([OpenQA.Selenium.By]::xpath('//button[text()="印刷"]'));
$element.Click();#selenium,#PowerShell
オフライン
ありがとうございます。
ご提示いただいた下記内容で印刷ができました。
補足で「text()="印刷"」の部分の¥マークが抜けていたので
下記内容に修正して印刷することができました。
$driver.ExecuteScript('window.print();');
Start-Sleep -s 1;
$wid =$driver.WindowHandles; <#ウインドウにハンドルを取得#>
$newWindow=$driver.SwitchTo().Window($wid[-1]); <#最後に開いたウインドウに移動#>
$element = $driver.FindElement([OpenQA.Selenium.By]::xpath('//button[text()=\"印刷\"]'));
$element.Click();
ありがとうございます。
これで楽天の自動化が進みます。
AIなくても #selenium,#PowerShell で完全自動化を目指します。
この度もご丁寧にご対応くださり、ありがとうざいました。
感謝いたします。
オフライン
ページ: 1
[ 0.006 秒でページを生成, 9 クエリーを実行 - 使用メモリー: 549.68 KiB (ピーク: 566.49 KiB) ]