質問編集履歴
1
実施したソースコードの追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,26 +1,38 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
Seleniumを使用し
|
3
|
+
SeleniumのWebDraiverを使用し、ブラウザ操作の自動化を行っているのですが、
|
4
|
-
一連の流れの中に複数回WEBページが遷移する場面があります。
|
5
|
-
|
4
|
+
ページにアクセスし、特定の要素が表示された時点で、読み込みを待たず次の処理に進む方法が分かりません。
|
5
|
+
調べたところ、WebDriverWaitクラスとExpectedConditionsクラスを使えば要素が表示されるまで待機することが分かったので下記コードで実行を行いましたが、要素が表示されてからもページ全体の読み込みを待っているように見えます。
|
6
|
+
(要素は表示されており手動でクリックできる状態ですが、ブラウザの左下にキャッシュ待機中…などが表示され読み込みが完全に終わるのを待っている状態)
|
6
7
|
|
7
|
-
実現したいこととしては、WEBページが遷移して完全にページを読み込む前に、htmlの特定要素があれば
|
8
|
-
次の処理に進むプログラムにしたいです。
|
9
|
-
(特定要素が表示された段階でWEBページのロードを停止するような処理になるのでしょうか。)
|
10
|
-
|
11
8
|
### 該当のソースコード
|
12
9
|
|
13
|
-
```
|
10
|
+
```WebDriverWait
|
14
|
-
|
11
|
+
//ページにアクセスする
|
12
|
+
driver.get("https://");
|
15
|
-
|
13
|
+
//submitBtnの要素が表示されるまで最大10秒待機
|
16
|
-
|
14
|
+
Wait<WebDriver> wait = new WebDriverWait(driver, 10);
|
15
|
+
wait.until(visibilityOfElementLocated(By.className("submitBtn")));
|
16
|
+
//submitBtnをクリック
|
17
|
+
WebElement element = driver.findElement(By.className("submitBtn"));
|
18
|
+
element.click();
|
19
|
+
```
|
20
|
+
```ExpectedConditions
|
21
|
+
//ページにアクセスする
|
17
|
-
|
22
|
+
driver.get("https://");
|
18
23
|
|
24
|
+
ExpectedCondition<WebElement> waitCondition = new ExpectedCondition<WebElement>() {
|
19
|
-
|
25
|
+
public WebElement apply(WebDriver driver) {
|
20
|
-
driver.get("https://www.google.co.jp");
|
21
|
-
|
26
|
+
return driver.findElement(By.className("submitBtn"));
|
22
|
-
element.sendKeys("テスト");
|
23
|
-
element.sendKeys(Keys.ENTER);
|
24
|
-
|
27
|
+
}
|
25
|
-
}
|
28
|
+
});
|
29
|
+
//submitBtnをクリック
|
30
|
+
WebElement element = driver.findElement(By.className("submitBtn"));
|
31
|
+
element.click();
|
32
|
+
|
33
|
+
wait.until(waitCondition);
|
26
|
-
```
|
34
|
+
```
|
35
|
+
|
36
|
+
上記で実行すると要素が表示されてからもページの読み込みが続行してしまうので手動でボタンを押した方が早くなってしまう状態です。
|
37
|
+
まとめると、ページ読み込み中でもボタンがあればクリックするという処理にしたいです。
|
38
|
+
勉強不足で非同期処理などあまり詳しくは分からないのですが関係があるのでしょうか。
|