以下のコードでは、パスワードフィールドにパスワードキーを送信できません。フィールドをクリックし、フィールドをクリアしてキーを送信してみました。しかし、現在はどのメソッドでも機能しています。しかし、デバッグしてテストすると
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であるためです。 [次へ]ボタンをクリックすると、Googleは最初に入力されたメールアドレスを確認し、次にパスワード入力フィールドを表示します(IDをPasswd-hiddenからPasswdに変更することにより)。そのため、パスワードフィールドがまだ非表示になっている(つまり、GoogleがまだメールIDを確認している)場合、Webドライバーはまだ非表示になっているID Passwdのパスワード入力フィールドの検索を開始します。したがって、例外がスローされます。
このようにパスワード欄を選択してみてください。
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement passwordElement = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#Passwd")));
passwordElement.click();
passwordElement.clear();
passwordElement.sendKeys("123");
私も同じ問題を抱えていて、原因を突き止めました。 inputタグの代わりにspanタグを入力しようとしました。私のXPathはspanタグを使用して記述されていましたが、これは誤りでした。要素のHTMLを確認したところ、問題が見つかりました。次に行ったのは、たまたま子要素であるinputタグを見つけることでした。 XPathが入力タグ名で作成されている場合のみ、入力フィールドに入力できます