1. ホーム
  2. javascript

[解決済み] [Solved] org.openqa.selenium.ElementNotInteractableException: Element is not reachable by keyboard: FacebookのFirstNameフィールドにテキストを送信する際に発生する例外です。

2022-02-08 07:56:06

質問内容

エラーは :

Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: Element <div id="u_0_b" class="_5dbb"> is not reachable by keyboard

コードがあります。

System.setProperty("webdriver.gecko.driver","//Users//rozali//Documents//Selenium//geckodriver");
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.facebook.com");
    driver.manage().window().maximize();

    //entering first name
    driver.findElement(By.id("u_0_b")).click();
    driver.findElement(By.id("u_0_b")).sendKeys("testing it ");

    //DOB
    Select sel1 = new Select(driver.findElement(By.xpath(".//*[@id='month']")));
    sel1.selectByIndex(4);

    Select sel2 = new Select(driver.findElement(By.xpath(".//*[@id='day']")));
    sel2.selectByValue("6");

    Select sel3 = new Select(driver.findElement(By.xpath(".//*[@id='year']")));
    sel3.selectByValue("2013");

    //clicking sign up
    driver.findElement(By.id("u_0_t")).click();

解決方法は?

ElementNotInteractableException: キーボードで要素に到達できない

Element is not reachable by keyboard は、キーボードを使ってその要素に到達できない、つまり、物理的にその要素に触れることができないことを意味します。

理由

エラーの背景には、複数の理由が考えられます キーボードで要素に到達できない のいずれかが考えられます。

  • この要素は 隠す 最近のJavaScript中心のUIスタイルでは、醜い生のHTML入力フィールドは常に非表示にされるからです。そのため hidden 属性は、以下のどちらかの方法で実装することができました。
    • A 一時的なオーバーレイ 目的の要素の上に他の要素の
    • A パーマネントオーバーレイ 目的の要素の上に他の要素の
    • 属性の有無 例 class="ng-hide" , style="display: none" など
    • ベストプラクティスとして、文字列を送信する際に click() または sendKeys() 任意の <p> または <div> タグの代わりに click() を指定します。 <input> タグに続いて ウェブドライバの公式ロケーターストラテジー .

解決方法

この問題に対処するためには、さまざまなアプローチがあります。

参考文献


この特定の問題

を調べると HTML フェイスブック ログインページでは、アプリケーションに リアクト ネイティブ 要素で構成されています。つまり、かつて id として u_0_b によって表現されるとは限りません。 id として u_0_b を使用すると、次に実行するときに、あなたのシステムで したがって、私たちは ダイナミックロケータ戦略 . 次のコードブロックを使って、目的のステップを実行することができます。

  • コードブロック :

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.facebook.com");
    driver.findElement(By.xpath("//input[@name='firstname' and contains(@class,'inputtext')]")).sendKeys("testing it ");
    //DOB
    Select sel1 = new Select(driver.findElement(By.xpath(".//*[@id='month']")));
    sel1.selectByIndex(4);
    Select sel2 = new Select(driver.findElement(By.xpath(".//*[@id='day']")));
    sel2.selectByValue("6");
    Select sel3 = new Select(driver.findElement(By.xpath(".//*[@id='year']")));
    sel3.selectByValue("2013");
    //clicking sign up
    driver.findElement(By.xpath("//button[@name='websubmit' and contains(.,'Sign Up')]")).click();
    
    
  • ブラウザクライアント:


更新情報

エラーに対応しました。

org.openqa.selenium.ElementNotInteractableException: Element is not reachable by keyboard

Firefoxの機能により、より簡単になりました。 moz:webdriverClick

moz:webdriverClick()

スルー webdriverClick() を使用すると、クリックやキー入力の際にどのようなインタラクティビティチェックを行うかをブール値で指定できます。例えば Firefoxen 以前は v58.0 の古いバージョンからインポートされたレガシーコードがあります。 FirefoxDriver が使用されていました。が利用できるようになったことで Firefox v58 が要求するインタラクティビティチェックは WebDriver仕様 はデフォルトで有効になっています。これは geckodriver が、クリックしたときに要素が他の要素によって隠されていないかどうか、そしてキーを送信するときに要素がフォーカス可能かどうかを追加でチェックすることを意味します。この動作の変更のため、いくつかの余分なエラーが返される可能性があることを私たちは認識しています。ほとんどの場合、問題のテストは新しいチェックに適合するように更新されなければならないかもしれません。

WebDriverの適合性チェックを一時的に無効にするには、次のようにします。 false をこのケイパビリティの値として使用します。

備考 : この機能は一時的にしか存在せず、対話性チェックが安定した時点で削除される予定です。