phpのopensslが有効にならない
php.iniにextension=php_openssl.dll
を追加してもphpinfoでOpenSSL supportがdisabeldのまま。
他の拡張はこれだけで動くんだけどなーって4時間ぐらいはまりました。
解決法
OpenSSL support disabled in Apache/PHP on Windows - Stack Overflow
httpd.conf
に↓を追加します。
LoadFile "{phpのインストールパス}\libeay32.dll" LoadFile "{phpのインストールパス}\ssleay32.dll" LoadFile "{phpのインストールパス}\php5ts.dll" LoadFile "{phpのインストールパス}\libpq.dll"
私の場合scoop経由でインストールしてたのでこうですね。
LoadFile "C:\Users\{ユーザー}\scoop\apps\php55\current\libeay32.dll" LoadFile "C:\Users\{ユーザー}\scoop\apps\php55\current\ssleay32.dll" LoadFile "C:\Users\{ユーザー}\scoop\apps\php55\current\php5ts.dll" LoadFile "C:\Users\{ユーザー}\scoop\apps\php55\current\libpq.dll"
apacheを再起動してphpinfoを確認
OpenSSL supportがenabledに!!!
英語読めないマンなのでStackOverflowの記事読んでもC:/jampp/php/
がどこのことかわからなくて(ググったらWin32 OpenSSLとか出てきて…)試せなかったんです。
1日置いて「もしかして…?」でファイル検索してみたらphpインストールフォルダにありました。
徒労感あるけどとりあえずうれしい!!!
以下試行錯誤した内容
環境
Windows10
scoop経由でphp7とphp5.5とapacheインストール
コマンドはPowerShellで実行
C:\Users\{ユーザー}\scoop\persist\php\cli\conf.d
編集しても効いてないようだったのでC:\Users\{ユーザー}\scoop\apps\php55\current\php.ini
を編集
※たぶんapacheの設定つまずいてhttpd.confのPHPIniDirに↑指定したから
;extension=php_openssl.dll extension=php_openssl.dll
httpd
してphpinfoを確認してみる
PS > httpd
作っておいたphpinfoにアクセス
pearのOpenSSLがdisabledのまま…
php -m
してみる
PS > php -m [PHP Modules] bcmath calendar Core ctype date dom ereg filter ftp hash iconv json libxml mbstring mcrypt mhash mysql mysqlnd odbc openssl pcre PDO pdo_mysql Phar Reflection session SimpleXML SPL standard tokenizer wddx xdebug xml xmlreader xmlwriter zip zlib [Zend Modules] Xdebug
opensslおるな…
php --ri openssl
してみる
PS > php --ri openssl openssl OpenSSL support => enabled OpenSSL Library Version => OpenSSL 1.0.1t 3 May 2016 OpenSSL Header Version => OpenSSL 1.0.1t 3 May 2016
WinAppDriverで日本語が文字化けする
タイトル詐欺だけど原因を知らなかった私はきっとこうググると思う…
現象
(Windows10)
①DesktopSession.findElementByName("メッセージ").sendKeys(Keys.Return);
みたいなコードを実行したとき、WinAppDriverのコンソールの{"using":"name","value":"メッセージ"}
の"メッセージ"部分が文字化けしてた。
②今にして思えばmvn test
したとき [WARNING]がめっちゃ出てた。一瞬で流れちゃうから見てなかった…
[WARNING] File encoding has not been set, using platform encoding MS932, i.e. build is platform dependent! [INFO] Compiling 21 source files to C:\pleiades\workspace\testtest\target\test-classes [WARNING] test.java:[7,34] この文字は、エンコーディングMS932にマップできません
直った方法
web-dev.hatenablog.com
↑記事を参考にpom.xmlの
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
つまり、ちゃんと文字コードしていしてコンパイルしようね、ってことでした。
学び
WARNINGを読まずに無視してはいけない
WinAppDriverを使ってみる2
JavaもSeleniumも英語もわからないけどとにかくwindows application driver使いたいシリーズ
前回、cmd.exeのセッション作れないー!ってなってたんですが、何かのissueからたどり着いた↓の記事のようにしたら出来ました。
WinAppDriver/README.md at v1.0-RC2 · Microsoft/WinAppDriver · GitHub
- デスクトップのセッションを作る
- デスクトップのセッションから起動したいアプリを起動する
- 起動したアプリの
NativeWindowHandle
を取得して16進数にする(←?) setCapability("appTopLevelWindow", /* 3の値 */);
してセッションを作る
@BeforeClass public static void setup() throws Exception { // デスクトップセッションを作る DesiredCapabilities appCapabilities = new DesiredCapabilities(); appCapabilities.setCapability("app","Root"); DesktopSession = new WindowsDriver<WebElement>(new URL("http://127.0.0.1:4723"), appCapabilities); DesktopSession.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // コマンドプロンプトを起動する DesktopSession.findElementByAccessibilityId("{********}\\cmd.exe").click(); // 起動しているコマンドプロンプトのハンドルを取得して... WebElement cmdWindow = DesktopSession.findElementByClassName("ConsoleWindowClass"); String cmdTopLevelWindowHandle = cmdWindow.getAttribute("NativeWindowHandle"); cmdTopLevelWindowHandle = "0x" + Integer.toHexString(Integer.parseInt(cmdTopLevelWindowHandle)); // 起動しているコマンドプロンプトのセッションを作る DesiredCapabilities cmdAppCapabilities = new DesiredCapabilities(); cmdAppCapabilities.setCapability("appTopLevelWindow", cmdTopLevelWindowHandle); CmdSession = new WindowsDriver<WindowsElement>(new URL("http://127.0.0.1:4723"), cmdAppCapabilities); CmdSession.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); }
タスクバーにコマンドプロンプトをピン留めしてそこをクリックして起動してます。
サンプルがJavaじゃない(?)みたいでそのままだと動かなかったのでいろいろ書き換えた結果コレで出来ました。
0x1234みたいなやつ全然意味わからないけどうまくいくからそのままにしてる…。
@AfterClassでセッションを閉じる前にコマンドプロンプトにexit
+Returnを送って画面閉じてます。
Ctrl+EscでWinキーの代用したかったけど出来なかった
結論
Winキー+Rで「ファイル名を指定して実行」を開きたかった。
Ctrl+Escでスタートメニュー開くから出来ると思った。
Ctrl+Esc+Rはスタートメニュー開くだけで「ファイル名を指定して実行」は開かない。
つまり Winキー != Ctrl+Esc です。
なんで調べたか
Windows Application Driverでcmd.exeを実行したかったんだけど、コマンドプロンプトは開くのにドライバ側でFailed to locate opened application window with appId ...
ってエラーが出てダメ。
issue見てたらデスクトップのセッションを作ってトップレベルウィンドウを指定すれば?って書いてたので試そうとした。
Winキー+R→「ファイル名を指定して実行」→cmd→コマンドプロンプト の順でやってみようとしたけど、org.openqa.selenium.Keys
にwinキーがなさそうだった。
...
結論に戻る。
WinAppDriverを使ってみる0
JavaもSeleniumも英語もわからないけどとにかくwindows application driver使いたいシリーズ
とりあえず、書き始める前に実行できる環境を整備する
1. eclipseでmavenプロジェクトを作る
新規 > Maven プロジェクト
シンプルなプロジェクトの作成にチェックを入れて次へ
グループId・アーティファクトId・名前・説明を入力して完了
グループIdどうすればいいのかわからないのでそれっぽい適当なの
アーティファクトIdと名前と説明はよくわからないので同じの入れてみた
できた
2. サンプルをコピペして動くか試す
pom.xmlにサンプルの<dependencies>
をコピペする
src/test/javaにサンプルのCalculatorTest.java
をコピペする
コンソールでWinAppDriver.exeを実行
もう一つのコンソールでプロジェクトのルートに移動してmvn test
やったぜ
WinAppDriverを使ってみる1
JavaもSeleniumも英語もわからないけどとにかくwindows application driver使いたいシリーズ
とりあえずサンプル改変して何か動かしてみよう!って段階でつまずいたことをメモします。
DesiredCapabilitiesって何?
DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");
この"app"って何入れればいいんだろう…
Capabilitiesについて を読んでみるとDesiredCapabilitiesクラスはブラウザの設定で、capabilitiesは詳細設定みたいなイメージなのかなー?
でもapp
はないなーWinAppDriverにあるかなーと思ったらあった。
GitHub - Microsoft/WinAppDriver: Windows Application Driver
appにはApplication identifier(アプリケーション識別子?)ってやつか実行可能なフルパスを入れればいいっぽい。
Application identifierってどうやって調べるの?
inspect.exeかなーと思ったけど電卓で試してみても同じような文字列は見当たらない。
「Windows Application identifier」で画像検索したらいいページ発見。
Find the AUMID (Application User Model ID) of an installed UWP app - jcutrer.com
神!このページの通りやったら表示できた!
- Winキー+Rで「ファイル名を指定して実行」を開く
shell:Appsfolder
を入力してEnter- 右上アイコンから詳細表示にする
- Altキー+Vで 表示 > 詳細表示の設定
- AppUserModelIdにチェックを入れてok
表示された電卓のAppUserModelIdをサンプルソースと比べたら一緒なのでこの方法で良さそう。
なんだけど!!!
{honyahoya}\cmd.exeで試してみたらダメみたい。
org.openqa.selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{app={honyahonya}\cmd.exe, platformName=Windows}], required capabilities = Capabilities [{}]
直せる方法あるのかもしれないけど、わかんないなら素直にフルパス書いた方が無難ですね
Win10でログイン出来ないから初期化する
いらないPCもらったけどログインアカウントのパスワードわからない!
結論
- ログイン画面右下の電源マークを押す
- Shiftキー押しながら「再起動」をクリック
- Windows REが起動するのでトラブルシューティングを選択
- 「このPCを初期状態に戻す」
4前後に全部消す?みたいなのあると思うけど忘れました。
Windows REってログイン後しか使えないと思ったけど使えるんだねー。
ぐぐってもこれにたどり着きにくいからもっと検索順位?上がってほしい
それまでに試したこと
適当なパスワードを入力してみる
Windowsにログインできればコンパネ?から初期化できるのに。だめだった。
BIOSでHDD Recoveryを探す
なかった
リカバリディスクを探す
ユーザーマニュアル見てたら※オプションですって書いてたからワンチャンあるかと思ったけどなかった