2017-07-19 8 views
0

以下のコードでは、パスワードフィールドにパスワードキーを送信できません。フィールドをクリックしてフィールドをクリアし、キーを送信しようとしました。しかし、現在、どの方法でも働いています。しかし、私はデバッグとテストの場合の作業要素がセレンのWebオートメーションで相互作用できない例外

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"); 
} 

答えて

3

暗黙の待機を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"); 

説明:パスワード入力フィールドのIDが最初のPasswd-隠されているので、セレンの要素を見つけることができない理由があります。 「次へ」ボタンをクリックすると、まず入力したメールアドレスが確認され、パスワード入力フィールドが表示されます(IDをPasswd-hiddenからPasswdに変更します)。パスワードフィールドがまだ表示されていない場合(つまり、GoogleがメールIDをまだ確認している場合)、PasswdというIDのパスワード入力フィールドの検索がウェブディスプレイから開始されます。したがって、例外がスローされます。

+0

良い説明:-)。期待通りの働きをしてくれてありがとう。 –

1

このようなパスワードフィールドを選択してみてください。

WebDriverWait wait = new WebDriverWait(driver, 10); 
    WebElement passwordElement = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#Passwd"))); 
    passwordElement.click(); 
    passwordElement.clear(); 
    passwordElement.sendKeys("123"); 
関連する問題