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を確認
f:id:qroku:20190418150121p:plain

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にアクセス f:id:qroku:20190418125037p:plain

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

enabled? cliでは有効でwebだと無効?apacheの設定…? →最初に戻る

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

JavaSeleniumも英語もわからないけどとにかくwindows application driver使いたいシリーズ

前回、cmd.exeのセッション作れないー!ってなってたんですが、何かのissueからたどり着いた↓の記事のようにしたら出来ました。
WinAppDriver/README.md at v1.0-RC2 · Microsoft/WinAppDriver · GitHub

  1. デスクトップのセッションを作る
  2. デスクトップのセッションから起動したいアプリを起動する
  3. 起動したアプリのNativeWindowHandleを取得して16進数にする(←?)
  4. 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

JavaSeleniumも英語もわからないけどとにかくwindows application driver使いたいシリーズ

とりあえず、書き始める前に実行できる環境を整備する

1. eclipsemavenプロジェクトを作る

新規 > Maven プロジェクト
f:id:qroku:20190201125903p:plain

シンプルなプロジェクトの作成にチェックを入れて次へ
f:id:qroku:20190201130112p:plain

グループId・アーティファクトId・名前・説明を入力して完了
グループIdどうすればいいのかわからないのでそれっぽい適当なの
アーティファクトIdと名前と説明はよくわからないので同じの入れてみた
f:id:qroku:20190201130738p:plain

できた
f:id:qroku:20190201130843p:plain

2. サンプルをコピペして動くか試す

pom.xmlにサンプルの<dependencies>をコピペする
f:id:qroku:20190201131227p:plain

src/test/javaにサンプルのCalculatorTest.javaをコピペする
f:id:qroku:20190201131422p:plain

コンソールでWinAppDriver.exeを実行
もう一つのコンソールでプロジェクトのルートに移動してmvn test

f:id:qroku:20190131181230p:plain

やったぜ

WinAppDriverを使ってみる1

JavaSeleniumも英語もわからないけどとにかく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
神!このページの通りやったら表示できた!

  1. Winキー+Rで「ファイル名を指定して実行」を開く
  2. shell:Appsfolderを入力してEnter
  3. 右上アイコンから詳細表示にする
  4. Altキー+Vで 表示 > 詳細表示の設定
  5. AppUserModelIdにチェックを入れてok

f:id:qroku:20190201123006p:plain 表示された電卓の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もらったけどログインアカウントのパスワードわからない!

結論

  1. ログイン画面右下の電源マークを押す
  2. Shiftキー押しながら「再起動」をクリック
  3. Windows REが起動するのでトラブルシューティングを選択
  4. 「このPCを初期状態に戻す」

4前後に全部消す?みたいなのあると思うけど忘れました。

Windows REってログイン後しか使えないと思ったけど使えるんだねー。
ぐぐってもこれにたどり着きにくいからもっと検索順位?上がってほしい

それまでに試したこと

適当なパスワードを入力してみる

Windowsにログインできればコンパネ?から初期化できるのに。だめだった。

BIOSでHDD Recoveryを探す

なかった

リカバリディスクを探す

ユーザーマニュアル見てたら※オプションですって書いてたからワンチャンあるかと思ったけどなかった