- 投稿日:2020-02-18T23:34:13+09:00
Selenuim 3.141.59 をeclipseで動かしてみる(java)
Seleniumのver上がっていたので初心者の方向けに詳しく書いていきます
環境
windows10 64bit
google chrome(80.0.3987.106)
eclipse (Version: 2019-12 (4.14.0))Seleniumのダウンロード
まずこちらのサイトからzipファイルをダウンロードします。
https://selenium.dev/downloads/
下の方へ行くとここにたどり着きます
対象の言語のものをダウンロードします。
ダウンロードボタンを押すとzipファイルがダウンロードされます。
どこかに保存してzipを解凍する。
解凍すると中身がこんな感じになってます。
解凍したら昔のverとかなり中身が違ってましたchromedriverのダウンロード
次にテストするブラウザのWebDriverをダウンロード
私はGoogleChorme使うのでここにアクセス。
https://sites.google.com/a/chromium.org/chromedriver/downloads
サイトの中を見るとchromeのversionが書いてあります。
今のchromeと同じversionを選択してクリック
クリックするとここに飛びます。
windowsの64bit版が無いので32bitのものをダウンロードします。
これもzipになってたので解凍します。
解凍すると1つだけファイルが入っているのを確認してください。
ここで必要なものを揃いました。eclipseで動かす
ではeclipseでプロジェクト作って動かしてみます。
ワークススペースと選んで新規プロジェクト作成。
プロジェクトの下に"lib", "exe"のフォルダを作成"lib"には
・解凍した"lib"フォルダの中身全部
・"client-combined-3.141.59-sources.jar"
・"client-combined-3.141.59.jar""exe"には
・chomredriver.exe
をimportで配置。ビルドパスを通す
では追加したjarをビルドパスに追加していきます。
ビルド・パスの構成を開きましょう
(プロジェクトを右クリック -> ビルド・パス -> ビルド・パスの構成)
開いたあとは"ライブラリ"タブに移動します。
"クラスパス"をクリックして"jarの追加"を選択
追加するものは先ほど"lib"フォルダに追加したものです。(shift + 左クリックで一気に選択できるぜ)
追加するとこんな感じ
適用して閉じる。
これでjarファイルやらの設定は完了!実行するファイルを作る
次に実行するファイル作ります。
"src"フォルダに新しいクラスを作成します。
クラス名は何でもいいです。
とりあえずsampleはこんな感じSample.javaimport org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Sample { public static void main(String[] args) throws InterruptedException { // TODO 自動生成されたメソッド・スタブ // Optional, if not specified, WebDriver will search your path for chromedriver. System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://www.google.com/xhtml"); Thread.sleep(5000); // Let the user actually see something! WebElement searchBox = driver.findElement(By.name("q")); searchBox.sendKeys("ChromeDriver"); searchBox.submit(); Thread.sleep(5000); // Let the user actually see something! driver.quit(); } }javaアプリケーションで実行すると動作が確認できます
以上です。ほとんど参考のものを引っ張っただけですけどね
Seleniumのzipファイルの中身が違いすぎてビックリした私のような初心者向けだと思って頂ければ...参考
- 投稿日:2020-02-18T19:12:09+09:00
コーディング中の警告解消時の注意点
はじめに
みなさん!コーディング時の警告はちゃんと解消してますよね?
ただ、「はいはいいつものやついつものやつ」とか「またこれねハイハイ」とか容易にソースを修正してませんか?
特にテストやらなんやら終わった後のクラスとかで「あれ?警告でてるじゃん、消しとこ」とかで軽い気持ちで修正しちゃったりとかありませんか?
その修正が思わぬ不具合につながるかもしれませんよ?
まえおき
理解してる人はあたりまえの話なのでそこはあたたかい目で読んでいただければと思います
例を作るにあたり、いろいろ突っ込みどころがあると思いますがご容赦を・・・!
ほんだい
極端な例ですが、例えばこんなclassがあったとします。
public class TestClass { TestClass() { hogeInt hogeInt = new hogeInt(); ... if (特定の条件) { Log.d("TAG", "前"); Boolean flg = hogeInt.getIntParam().equals(1); Log.d("TAG", "後"); Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show(); } ... } } class hogeInt { private Integer intParam = null; @Nullable public Integer getIntParam() { return this.intParam; } public void setIntParam(Integer intParam) { this.intParam = intParam; } }そして特定の条件内に入るのが極稀なケースだったとします。
ここでひとつPointなのですが、これを何もせずに実行した場合、
Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();が実行される前にクラッシュします。
( hogeInt.getIntParam() はNull なのに equals を実行しようとしているので)そして本題。
Boolean flg = hogeInt.getIntParam().equals(1);こいつは警告として表示されます。
今回だと「’NullPointerException’を生成する可能性があります」ってやつですね。わりかしよく見かける部類の警告だと思います。これをアプリ改良中に「あれ?ここ警告でてるからついでに修正しておこう」とか「そういえばたまにクラッシュ報告あるけどこいつかも」
といった軽い感じで何も考えずにソースを修正した場合ソースがこう変化します
public class TestClass { TestClass() { hogeInt hogeInt = new hogeInt(); ... if (特定の条件) { Log.d("TAG", "前"); if (hogeInt != null) { Boolean flg = hogeInt.getIntParam().equals(1); } Log.d("TAG", "後"); Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show(); } ... } }今までクラッシュしていた部分をnullチェックでスルーする事によって後続が流れるようになり、めでたくサーバにTruncate文が投げられる事になりました。
ちなみに今回のお話は警告は残しておいてもいいよ!という事ではなく、小さな警告を消す場合でも慎重になれという事です。
何かしら修正を入れる場合、その一文だけを見ずに、全体の流れをちゃんと把握した上で修正しましょう!
- 投稿日:2020-02-18T17:12:50+09:00
[java] staticを使う理由
javaを使っていてstaticとかどうやって使い分けるのかあいまいだったので、それを調査した。
static
メソッドやメンバ変数にstatic修飾子を付けると、staticメソッド、static変数になります。
static修飾子を付けると何が変わるかというと、newしなくてもそのメソッドやメンバ変数にアクセスできるようになります。http://www.366service.com/jp/qa/75864cfae2ee945a362e5a9818cabb58
つまり共通のメソッドや変数をクラス間で共有したい場合に使うということ。以前Applicationクラスを通してデータをやり取りするという記事を書いたが、それと同じである。
https://qiita.com/QiitaD/items/549fb2143b2774c30d72(それにしてもstaticおじさんはさすがに笑った…)
ほかにも「インスタンス化しなくても利用できるから」というものがある。Utilityクラスなどは、メソッド単体で処理が完結している、つまりクラスを定義した時点で用途が確定しているので、インスタンス化が必要ないということらしい。その場合はstaticもする。
https://teratail.com/questions/13203感想
staticについてはわかったが、publicやfinal等まだわかっていない。
publicとprivateは言わずもがなオブジェクト指向設計の観点から使い分けるのだろう。
しかしprotectedやデフォルトがなぜ存在しているのかわからない(アクセスに違いがあるのはわかるが)ので、それも調べてみたい。
- 投稿日:2020-02-18T12:43:07+09:00
インスタンスの扱い方
Javaの学習における自分用のmemoです。
インスタンスとは
・クラス(設計図)を具現化したもの
・ヒープ領域に保存される※1
・newと言うキーワードを使って生成する※2※1 ヒープとは、JVM上で「ユーザが作ったプログラムが利用するメモリ領域」のこと
※2 newはヒープ領域に「新しくインスタンス用の領域を確保する」という意味の命令参照型変数とは
・インスタンスそのものでなく、インスタンスへの参照(住所のようなもの:リンク情報)が入っている
・オブジェクト型変数とも呼ぶ
・参照がない状態を示す特別な値にnullというのがあるプリミティブ型変数とは
・変数そのものがデータ
・int型やdouble型、char型など
・仕様として提供されている基本的な型コンストラクタメソッド
・インスタンス生成と同時に自動的に実行される
・メソッド名はクラス名と同じにしなければならない
・戻り値型を記述できない
・インスタンス生成時のみ呼び出し可能
・プログラマーが定義しなくてもコンパイラによって自動的に定義される(デフォルトコンストラクタ)
・プログラム実行時、コンストラクタの処理が終わってから他のメソッドが呼び出せるようになるガベージコレクション
・不要になったインスタンスをメモリから自動で破棄してくれる自動メモリ管理機能があり、これを「ガベージコレクタ」という
・ガベージコレクションが実行されるタイミングはガベージコレクタが自動的に判断する
・ガベージコレクタがメモリ内のインスタンスを破棄する行為のことオーバーロード
・メソッド名と引数をまとめてシグニチャと呼ぶ
・シグニチャが異なれば異なるメソッドとしてコンパイラやJVMに識別される
・コンストラクタもオーバーロードできるクラス変数とクラスメソッド
・ヒープ領域の一部にクラスファイルを保管しておき、そこからインスタンスを生成する仕組みがある
・このクラスファイルを保管する領域を「パーマネント領域」と呼ぶ
・static修飾子のついたメソッドやフィールドはstatic領域に作られる
・staticなメソッドやフィールドはインスタンスが生成されていなくても使うことができる
・staticメンバーからインスタンスメンバーにアクセスしようとするとコンパイルエラーになる
- 投稿日:2020-02-18T11:15:40+09:00
コマンドプロンプトでjava -versionしてもJAVA_HOMEに設定したJDKが出てこない問題
前提条件
PC環境
- Winsows10
- Java6(x64)
コマンドプロンプトでjava -versionしてもJAVA_HOMEのJDKが出てこない
タイトルの通りなので以下解決方法。
下記コマンドを実行して
C:\Users\test>set JAVA_HOME C:\Users\test>where java以下のように表示されたら
Java 6 Update 45
などの名前のファイルがインストールされているのでアンインストールする。C:\Users\test>set JAVA_HOME JAVA_HOME=C:\Program Files\Java\jdk1.7.0_21 C:\Users\test>where java C:\Windows\System32\java.exe C:\Program Files\Java\jdk1.7.0_21\bin\java.exePCを再起動して以下のコマンドを実行すると
C:\Windows\System32\java.exe
が削除されているはず。C:\Users\test>where java C:\Program Files\Java\jdk1.7.0_21\bin\java.exeこれで
java -version
を実行するとJAVA_HOMEに設定したJDKが正しく読み込まれるようになる。C:\Users\test>java -version java version "1.7.0_21" Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)補足
一度、環境構築してから言語のバージョンアップのようなメジャーアップデートでもしない限り
基本的にJDKをアップデートすることはないと思われるので、アップデータはインストールしておく必要はない。※セキュリティ的に問題はあるのでできれば最新のJDKで開発した方がいい