質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1090閲覧

[Java]SWTとSeleniumを使って画面設計をしています

chinchin0721810

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/08/19 12:11

現在SWTで画面を設計しながらその中であるボタンを押せばIEが開き、特定のページに飛ぶプログラムを作成しているのですが、
ボタンを押した後に、IEが立ち上がり特定のページに飛ぶと、その間SWTで作成したshellが応答なしになって何も入力を受け付けてくれません。
改善方法などありますでしょうか。ソースコード張っておきます。

Java

1public class Main { 2 static public String driverPath = "IEDriver\IEDriverServer.exe"; 3 static public InternetExplorerDriver driver; 4 static Display display = new Display(); 5 static Shell shell = new Shell(display); 6 7 public static void main(String[] args) { 8 9 shell.setLayout(new FillLayout()); 10 shell.setText("試作プログラム"); 11 ButtonFactory button = new ButtonFactory(shell, SWT.PUSH); 12 button.setText("Googleに飛ぶ"); 13 button.openHomePage(); 14 15 ButtonFactory button2 = new ButtonFactory(shell, SWT.PUSH); 16 button2.setText("実行"); 17 18 shell.pack(); 19 shell.open(); 20 while (!shell.isDisposed()) { 21 if (!display.readAndDispatch()) { 22 display.sleep(); 23 } 24 } 25 display.dispose(); 26 } 27 28}

Java

1public class ButtonFactory { 2 3 private Button button; 4 5 public ButtonFactory(Composite parent, int style) { 6 this.button = new Button(parent, style); 7 } 8 9 Button getButton() { 10 return button; 11 } 12 13 public void setText(String name) { 14 button.setText(name); 15 } 16 17 public void openGoogle() { 18 button.addListener(SWT.Selection, new Listener() { 19 public void handleEvent(Event event) { 20 System.setProperty("webdriver.ie.driver", new File(Main.driverPath).getAbsolutePath()); 21 Main.driver = new InternetExplorerDriver(); 22 Main.driver.get("Google.com"); 23 } 24 }); 25 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gouf

2020/08/19 12:42

実際にゴールとする地点は、Selenide ( https://selenide.org/ ) のような E2E テストですか? あるいは他のことですか?
guest

回答1

0

handleEventはイベントディスパッチスレッド上で実行されますので、handleEvent内で時間がかかる処理を実行するとその間ウィンドウが応答しなくなります。この場合は

java

1Main.driver.get("Google.com");

が原因で、ページのロードが終わるまで処理が終わりません。ページを開くのは別のスレッドを使って行ったほうが良いでしょう。

ちなみに蛇足ですが、InternetExplorerDriverはIE11で不具合が生じるようです。開くだけなら問題ないでしょうが、Windowsのアップデートで更に壊れる可能性があるので使わないほうが良いです。(今どきIE使ってる人も少ないですしね...)

参考: https://stackoverflow.com/questions/23770843/cannot-find-any-elements-in-selenium-using-internet-explorer-driver

投稿2020/08/19 15:29

Toshimichi

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問