[解決済み] Selenium Web Automation で、要素が対話可能でない例外が発生する。
2022-02-05 14:55:07
質問
以下のコードで、パスワードフィールドにパスワードキーを送信できません。フィールドをクリックし、フィールドをクリアしてキーを送信してみました。しかし、今はどのメソッドでも動作しています。しかし、私はデバッグとテスト場合は動作します
public class TestMail {
protected static WebDriver driver;
protected static String result;
@BeforeClass
public static void setup() {
System.setProperty("webdriver.gecko.driver","D:\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
}
@Test
void Testcase1() {
driver.get("http://mail.google.com");
WebElement loginfield = driver.findElement(By.name("Email"));
if(loginfield.isDisplayed()){
loginfield.sendKeys("[email protected]");
}
else{
WebElement newloginfield = driver.findElemnt(By.cssSelector("#identifierId"));
newloginfield.sendKeys("[email protected]");
// System.out.println("This is new login");
}
driver.findElement(By.name("signIn")).click();
// driver.findElement(By.cssSelector(".RveJvd")).click();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
// WebElement pwd = driver.findElement(By.name("Passwd"));
WebElement pwd = driver.findElement(By.cssSelector("#Passwd"));
pwd.click();
pwd.clear();
// pwd.sendKeys("123");
if(pwd.isEnabled()){
pwd.sendKeys("123");
}
else{
System.out.println("Not Enabled");
}
解決方法は?
10秒程度の暗黙の待ち時間を設定してみてください。
gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
または明示的な待ちを設定する。明示的な待機とは、特定の条件が発生するのを待ってからコードを進めるように定義することです。あなたの場合、それはパスワード入力フィールドの可視性です。(ainlolcatさんのコメントに感謝します)
WebDriver gmail= new ChromeDriver();
gmail.get("https://www.gmail.co.in");
gmail.findElement(By.id("Email")).sendKeys("abcd");
gmail.findElement(By.id("next")).click();
WebDriverWait wait = new WebDriverWait(gmail, 10);
WebElement element = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));
gmail.findElement(By.id("Passwd")).sendKeys("xyz");
説明 : seleniumが要素を見つけられない理由は、パスワード入力フィールドのidが最初はPasswd-hiddenであるためです。あなたが "Next" ボタンをクリックした後、Google はまず入力されたメールアドレスを検証し、次にパスワード入力フィールドを表示します(id を Passwd-hidden から Passwd に変更することで)。そのため、パスワードフィールドがまだ隠されている(つまり、Googleがまだメールアドレスを検証している)とき、Webdriverはまだ隠されているPasswdというIDのパスワード入力フィールドを検索し始めます。そのため、例外がスローされます。
関連
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み】予期しない型エラー
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)