2017-07-19 1 views
0

Dans le code ci-dessous, je ne peux pas envoyer de mot de passe dans le champ mot de passe, j'ai essayé de cliquer sur le champ, effacer le champ et envoyer les clés. Mais maintenant, travailler dans n'importe quelle méthode. Mais son fonctionnement si je débogue et le testélément non interactif exception dans la web automation selenium

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

Répondre

3

Essayez de définir une attente implicite de peut-être 10 secondes.

gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

Vous pouvez également définir une attente explicite. Une attente explicite est le code que vous définissez pour attendre qu'une certaine condition se produise avant d'aller plus loin dans le code. Dans votre cas, c'est la visibilité du champ de saisie du mot de passe. (Merci au commentaire de 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"); 

Explication: Le sélénium raison ne peut pas trouver l'élément est parce que l'identifiant du champ de saisie du mot de passe est d'abord Passwd caché. Après avoir cliqué sur le bouton "Suivant", Google vérifie d'abord l'adresse e-mail entrée, puis affiche le champ de saisie du mot de passe (en changeant l'identifiant de Passwd-hidden à Passwd). Ainsi, lorsque le champ du mot de passe est toujours masqué (c'est-à-dire que Google vérifie toujours l'adresse électronique), votre pilote Web commence à rechercher le champ de saisie du mot de passe avec l'ID Passwd qui est toujours masqué. Et par conséquent, une exception est levée.

+0

bonne explication :-). Son fonctionnement comme prévu, merci beaucoup. –

1

S'il vous plaît essayez de sélectionner le champ de mot de passe comme ça.

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