from electron 2 web

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

seleniumでwebextensionを動かす

firefoxを制御するには

org.openqa.selenium.WebDriver(全ての基礎的なパッケージ) org.openqa.selenium.driver.FirefoxDriverの2つだけでいいんだけどchromeを制御するととたんに難しくなる。

それ以外のブラウザの場合System.setProperty("定数","ブラウザのパス")が必要。

System.setProperty("key","val")

JVMに設定されるシステムプロパティであってOSの環境変数とかではない。

java.vm系にはjvmのメタ情報、java.にはjreの情報、OSやユーザーなどのjvmの外の環境も映し出される。

環境情報系はSystem.getenvで取れる。

System (Java Platform SE 8)

Unable to move the cache: 0

URL class

エスケープめんどいからurlクラスでも使おうかなって思ったけど

javaのurl classはjsのurl classみたいな使い方じゃないっぽい

ていうかそもそも言語仕様の時点でエスケープ必要だからurlクラスとか関係ないんだよなあ。

U()みたいな書き方が出来るのはpythonだっけな

ということで意味なし。

assertEqurls

JUnitでテスト書いてた時めっちゃ多用したなあ。

あれ何でテスト書いたんだっけな。アンドロイドアプリだっけ?

オライリーの超新しい本(あの紫のやつ)使いながら書いたのは覚えてる。

sunjava.seesaa.net

firefoxのプロファイルを切り替えることも出来る。

elementを操るにはWebElementクラスのインスタンスを使う。

selenium.WebElementパッケージを使う。

elementの特定にはByスタティックメソッドを使う。

特定した後はWebElement.click()でクリックしたりWebElement.sendkeys()でキーボード入力出来る。

JavascriptExeculetorパッケージをインポートして.executeScript()でjs実行もできる。

Generated Documentation (Untitled)

やっとドキュメント見つけた・・・

Selenium Documentation — Selenium Documentation

こっちはインタラクションてきな。

javaにはjava.io.Readerにcsvreaderがある。

テキストにテストデータをcsvで書いて読みだすとカッコいいかも。

まあ今回はテストするのが目的なのでsourceに直接書くけど。

widowの切り替え

  • alertなど

alertやconfirmなどの操作も出来る。英語でポップアップって書いてある時はだいたいこれなんだよなあ

WebDriver.switchTo().alert()でAlertインスタンスを作ってそれを操作する。

  • window.open

基本的に上と同じ。WebDriver.switchTo().window(window_id)


良い↓

jigsaw.hatenablog.jp

右クリック

Actionsで出来るらしい。どうせならキーボード入力もコッチにすればいいのに。

ActionとActionsの違いがわからん。。。

↑例えばDnDなどはいろんな動作が集まって出来てるけどそういうのを実行するのがActions。単体がAction。

Actions action=new Actions(WebDriver)インスタンスからコマンドのメソッドチェーンをつなげて、最後にbuild()メソッドコンパイルする。

んで action.paformed()で実際に動かす。

マウス操作系は大体できる。さらにActions(WebDriver).sendkey()で画面単位のキーボード入力ができるのでショートカットや、vimp入れれば色々出来るし、画面上のメニューにも届く。

出来た。

来た!キッターーー!!キタ━━━━(゚∀゚)━━━━!!

はい。

chrome拡張機能に対してショートカット設定できるからそれで設定してでき・・・る?

そうか。キーボード設定をする必要があるのか。

chrome://extensionsに遷移すれば行けるけど。んでリンクの特定、switchTo()window()、要素をセレクトする、キーボードショートカットの入力、確定ボタン、その後windowを消す。

ていうかまずwebextenisonをインストールさせる必要が有るんだよなあ。

まあいいや、出来そうだ。頑張ろう。

エラー

[9132:12664:0316/160435:ERROR:cache_util_win.cc(20)] Unable to move the cache: 0

これはすぐ分かった。chromeを2つ起動してる時にでる。

[12464:11480:0316/160558:ERROR:shell.cc(293)] Error: Instance: exe:chrome attempting to register an instance for a process it created for target: exe:chrome_renderer without the mojo:shell{client_process} capability class.
[12464:11480:0316/160558:ERROR:shell.cc(293)] Error: Instance: exe:chrome attempting to register an instance for a process it created for target: exe:chrome_renderer without the mojo:shell{client_process} capability class.
[12464:11376:0316/160608:ERROR:form_field_data.cc(200)] Unknown FormFieldData pickle version 0

これについてはほんとに悩んだ。

まずググるseleniumに関する記事が一見もヒットしない。

アドオン関係が多かったのでアドオンを消してみても効果なし。

しかも全く同じコードがfirefoxだと動く。

とりあえず使ってるseleniumコマンド調べまくったら

System.setpropertyはchromeのパスではなくchrome driverのパスらしい。

chrome driverとかいうものをインストールする必要があるのか・・・

webdriver.chrome.driverこの変数にしていするものなんてパット見chromeしか無いでしょと思って見てなかった。

成功した。ていうかそうすると上の図も変更することになるのか。こわれるなあ。

続き

無事findElement.(By.id())やcontentclick()なども成功。

#lst-ibと#lst-id見間違えてたけどな。

extensionインストール

seleniumのslackでこんなコードがあるよって教えてもらった

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("bin/about_travis/textlint--Proofreader_v1.3.0.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

このコードなぜかsetCapabilityでフリーズした。調べてもよくわからん。

いよいよ内部的なところに入ってきた。

chromeoption

chromeoptionsがわからんことには何も出来ない。

sites.google.com

良さ生えた

setとlistの違い

最近はjava関係で詰まってることが多い。

listは重複が許される。listは挿入する場所を正確にコントロール出来る

List (Java Platform SE 6)

setとか聞くとES6のset,weakset,map,weakmapを思い出すなあ。めっちゃ調べてた。(結局使わなかった

バグ提出

chromedriverがtextlintのアドオン読み込むとフリーズする件、バグ提出した。

みんなもどんどんバグ提出しような!ってなかのんさんが言ってた。

twitterで文句垂れ流すぐらいなら時間かかるけどOSSのコミュニティ元に殴りこんでバグ提出したほうがぜったい良いよね。

しかも驚くのがたまに開発者でもtwitterで文句垂れ流すだけの奴がいること。

OSSコミュニティの人は好きでやってるんだからその製品のこと大体エゴサしてるからそのツイート見られてるよ。って言いたい

そういうとこの違いがデキる人とできない人の違いだと思う。

そのバグがduplicateしてるかどうかを調べられるとなおgoodだよね。俺は英語力糞雑魚なので調べたつもりでも類語だったのでヒットしなかったみたいなのが多々あるので辛い。

Issue 1346 - chromedriver - when certainly extension install chrome using chromedriver,it was freezied. - Monorail

sendKeys

sendKeys(Keys.ESCAPE+"e")みたいな感じでなぜかちゃんと同時押しされない。。。同じコードを2回実行すると最後のやつは動くんだけど

でもそういえばちらっとキー同時押しはKeys.chord(val,val,...)使えって書いてあったの見た気がするのでやったらいけた。

よかった。

てかctrl+shift+oでインポートできるのか。積極的に使っていこう。

あとjavadocな。ctrl+shift+jな。

logを取る

stackoverflow.com

予想以上にめんどかった。

selenium初心者なのでChromeOptionsでDesiredCapatilities.setCapabilities()する方法がわからなかった。

おおまかな流れはDesiredCapabilities().chrome()でインスタンスを作って

LoggingPreferencesインスタンス化してenable()でタイプとレベル選んで

LoggingEntriesでエントリーリスト取ってLogEntry.getMessage()するかんじ。

ファイル消える

辛み

eclipseの関係でgitプロジェクトをjavaとしてインストール出来なかったのでこんなふうになった。

でもファイルビューのファイル右クリックからローカルヒストリーの復元から生き返った。。。良かった。。。

この時生き返らせたいクラスを全部消すこと。全部消した時点で発動するのでただの変更とかだとlocal history に追加のメンバーがいませんとか言われる

eclipseで消してしまったファイルを復元したい (技術メモ)

返信

chromeDriverの開発者にどうしたら落ちたかの手順を返信。