これを実現するには、Linux マシンで Selenium を実行し、HtmlUnitDriver を使用する必要があります。
Selenium スクリプトには、要素を見つけるための Xpath のほとんどが含まれています。実行中、xpath が使用されている場所で NoSuchElementException が表示されます。
org.openqa.selenium.NoSuchElementException: Unable to locate a node using //*[contains(text(),'Sample Text')]
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
同じコードは、Chrome、Firefox、IE などの他のドライバーでも問題なく動作します。
私のコードは以下のようになります。
HtmlUnitDriverdriver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
driver.get("http://example.com");
driver.findElement(By.id("username")).sendKeys("xxx");
driver.findElement(By.id("password")).sendKeys("yyy");
driver.findElement(By.id("loginButton")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//*[contains(text(),'Sample Text')]")).click();
私は多くの同様の質問を見つけました。解決策は、スリープ時間を提供するか、要素がロードされるまで待つことです。私はすべてを提供しましたが、xpath を使用すると、まだこの問題に直面しています。
また、ID または名前で要素を見つけることは、毎回異なるため、私のユース ケースでは不可能です。
span タグ内のテキストを検索するには、xpath のみを使用できます。
これを処理するためのソリューションが必要です。前もって感謝します!
編集 :
Gmailのログインでも同じことを試しましたが、それでも同じ問題が発生しています。
driver.get("http://www.gmail.com");
driver.findElement(By.id("Email")).sendKeys("xxx@gmail.com");
driver.findElement(By.id("next")).click();
Thread.sleep(2000);
driver.findElement(By.id("Passwd")).sendKeys("yyy");
driver.findElement(By.id("signIn")).click();
Thread.sleep(8000);
driver.findElement(By.xpath("//*[contains(text(),'COMPOSE')]")).click();