|
UwscWebDriverを使ったUWSCの記述の仕方を学習していますが、 ボタンをクリックして表示されるウインドウでファイルを選択する という基本的な操作の記述の仕方がよく分からないので教えてください。
具体的には、
C:\uwsc_testというフォルダに以下の5つのファイルがあります。 ・UwscWebDriver.uws ・msedgedriver.exe ・test.html (リスト1参照) ・test.uws (リスト2参照) ・test.txt (とりあえず中身は何でもよい)
test.htmlをMicrosoft Edgeで開くと、 「ファイル選択」というタイトルのページが表示されます。 「ファイルの選択」ボタンをクリックします。 「開く」というタイトルのウインドウが表示されます。 「ファイル名(N):」のボックスに「C:\uwsc_test\test.txt」を入力して、 「開く」ボタンをクリックします。 「開く」のウインドウが閉じて、元の「ファイル選択」のページに戻ります。 「ファイルの選択」の右側に「test.txt」と表示されていることを確認して、 「閉じる」ボタンをクリックして、「ファイル選択」のページを閉じます。
以上の操作をUwscWebDriverを使ってUWSCで操作させたいのですが、
下記のリスト2(test.uws)のようなコードを記述しましたが、 (3)と(5)の部分で「ファイルの選択」ボタンと「閉じる」ボタンの クリックの処理がうまくいきません。 (3)で「開く」ウインドウが開いて、 (5)で「ファイル選択」ページが閉じるようにするには、 どのように記述すればよいのでしょうか。
---リスト1(test.html)-------------------------------------------------- <HTML xmlns="http://www.w3.org/1999/xhtml"> <HEAD> <TITLE>ファイル選択</TITLE> <META content="text/html; charset=utf-8" http-equiv=Content-Type> </HEAD> <BODY> <FORM> <DIV> </DIV> <TABLE cellSpacing=0 cellPadding=2 width=730 align=center border=1> <TBODY> <TR> <TH class=size14 style="WIDTH: 163px" bgColor=#ffffcc height=20 vAlign=middle noWrap align=center>ファイル</TH> <TD bgColor=#dddddd height=20 vAlign=middle colSpan=2 align=left> <INPUT style="HEIGHT: 27px; WIDTH: 100%" type=file id="filepath"> </TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=2 width=730 align=center border=0> <TBODY> <TR> <TD align=right> <INPUT onclick=window.close(); type=button value=閉じる id="closebtn"> </TD> </TR> </TBODY> </TABLE> </FORM> </BODY> </HTML> -----------------------------------------------------------------------
---リスト2(test.uws)--------------------------------------------------- CALL UwscWebDriver.uws
//(1)Edgeの起動 driver = WebDriver.ChromiumEdge()
//(2)test.htmlの表示 driver.Navigate("C:\uwsc_test\test.html") driver.SetRect(835, 270, 10, 10)
sleep(1)
//(3)ファイルの選択ボタンをクリックして開くウインドウを開く element = driver.FindElement(By.Tag("input") + By.Id("filepath")) element.Click()
sleep(1)
//(4)開くダイアログでファイルを指定して開くボタンをクリック id=GETID("開く") SENDSTR(id, "C:\uwsc_test\test.txt", 1, True) sleep(2) CLKITEM(id, "開く", CLK_BTN, True, 1 )
sleep(1)
//(5)閉じるボタンをクリックしてファイル選択のページを閉じる element = driver.FindElement(By.Tag("input") + By.Id("closebtn")) element.Click() -----------------------------------------------------------------------
【実行環境】 ・OS (Windows10) ・Microsoft Edge (98.0.1108.56) ・UwscWebDriver.uws (0.8.2) ・msedgedriver.exe (ChromiumEdge 98.0.1108.56)
よろしくお願いします。
|
No.1455 2022/02/26(Sat) 15:50:27
|
☆ Re: UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / しろまさ |
|
|
|
// 使ってる奴。説明無し。使いこなせるならどうぞ。EdgeとChromeの違いは要修正。 // 全角空白2個を水平タブに置換してください
Public fEndDlg = FALSE // 入力完了フラグ
WD.FindElement("#updateImportType").Click() FileOpenDlgWD(fpXL, "現場 一括取込・更新")
Procedure FileOpenDlgWD(_fpXL, _ttlWD) Dim #idW, #idD, #Ttl = Ttl(2) Repeat // Chrome idWin取得 #idW = GetID(_ttlWD , "Chrome_WidgetWin_1", 0.5) Until #idW > 0 // 取得出来たら抜ける Repeat // クリック〜FileOpenDLG待機 Sleep(0.2) ClkItem(#idW, "ファイルを選択") // win7?でクリック出来ない #idD = GetID(#Ttl, "#32770", 1) // 2:開く Ifb #idD < 1 AND KindOfOS() < 30 // win7 はメッセージ MsgBox("ブラウザの 【 ファイルを選択 】 ボタンをクリック後、OKを押してください。") #idD = GetID(#Ttl, "#32770", 1) // 2:開く EndIf Until #idD > 0 Thread th_InputXLfp(_fpXL, 2) // FileOpenDLGの入力・確認(スレッド処理) Repeat Sleep(0.2) ; Until fEndDlg // ダイアログの終了を待機 Sleep(2) FEnd
// ファイルオープンダイアログでXLパスを入力し決定する Procedure th_InputXLfp(_fp, _n = 1) fEndDlg = FALSE Dim #id, #gtE = gtE_Get(15) Repeat Repeat gtE_Chk(#gtE, TRUE) #id = GetID(Ttl(_n), "#32770", 0.5) Until #id > 0 Sleep(1) Ifb KindOfOS() >= 30 // win10以降 Repeat SendStr(#id, "", 1, TRUE) ; Sleep(0.2) SendStr(#id, _fp, 1, TRUE) ; Sleep(0.2) Until GetStr(#id, 1, STR_EDIT) = _fp Else // win7 Repeat SendStr(#id, "", 0, TRUE) ; Sleep(0.3) SendStr(#id, _fp, 0, TRUE) ; Sleep(0.3) Until GetStr(#id) = _fp EndIf ClkItem(#id, "開く(O)", CLK_BTN) Repeat If gtE_Chk(#gtE) Then Continue 2 #id = GetID(Ttl(_n), "#32770", 0.2) Until #id < 1 Sleep(1) Until TRUE fEndDlg = TRUE FEnd
Function Ttl(_n) Dim #s Select _n Case 1 ; #s = "アップロードするファイルの選択" // IE Case 2 ; #s = "開く" // Chrome Default ; MsgBox(_n +" 未定義の番号です。") ; ExitExit SelEnd Result = #s FEnd
// 待機終了管理 Function gtE_Get(_secWait = 15) Result = GetTime() + _secWait FEnd Function gtE_Chk(_gtE, _EndM = FALSE) Result = GetTime() > _gtE Ifb Result MsgBox("待機時間を超過したため終了します。") ExitExit EndIf FEnd
|
No.1457 2022/02/28(Mon) 11:38:47
|
|