2016-01-24 1 views
1

Я хочу создать функцию отправки gmail, но код может отправлять только пустой gmail. Я думаю, что переключатель кадра неверен. Может ли кто-нибудь сказать мне, какой кадр для составления gmail? Я попытался найти много разрешений в Интернете, но не получил ответа. Поскольку Google сильно изменил детали gmail html, я не смог найти способ. Я новичок в selenium, поэтому, если вы можете понять, как найти фрейм в html, я буду благодарен вам за помощь.Невозможно набрать текст в теле письма для Selenium Java

Большое спасибо!

package com.email.test; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class send_email { 
    private static WebDriver driver; 
    private static String baseUrl; 

    public static void main(String[] args) throws InterruptedException { 
     // TODO Auto-generated method stub 
     String username = "[email protected]"; 
     String password = "robertIlinda1987RED"; 
     ComposeMail(username, password); 
    } 

    public static void ComposeMail(String username, String password) throws InterruptedException{ 
     Date dNow = new Date(); 
     SimpleDateFormat subjectdate = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 
     String emailsubject = "Current time" + subjectdate.format(dNow).toString(); 
     String tomailid = "[email protected]"; 
     String mailbody = password + "\n" + "Great! you sent email:-)" + "\n" + "Regards," + "\n" + "Robert"; 
     driver = new FirefoxDriver(); 
     baseUrl = "https://mail.google.com"; 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

     /* Navigate to Gmail */ 
     driver.get(baseUrl+"/intl/en/mail/help/about.html"); 
     driver.manage().window().maximize(); 

     /* Enter username and password */ 
     driver.findElement(By.id("gmail-sign-in")).click(); 
     driver.findElement(By.id("Email")).clear(); 
     driver.findElement(By.id("Email")).sendKeys(username); 
     driver.findElement(By.id("next")).click(); 
     driver.findElement(By.id("Passwd")).clear(); 
     driver.findElement(By.id("Passwd")).sendKeys(password); 
     driver.findElement(By.id("signIn")).click(); 
     //System.out.println(driver.getTitle()); Inbox (8,142) - [email protected] - Gmail 

     /*Verify login*/ 
     String title = "Gmail"; 
     if(driver.getTitle().contains(title)){ 
      System.out.println("Logged in sucessfully !!!" + driver.getTitle()); 
     }else{ 
      System.out.println("Unable to loggin :-(" + driver.getTitle()); 
     } 

     /* Compose email */ 
     Thread.sleep(1000); 
     driver.findElement(By.xpath("/html/body/div[7]/div[3]/div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div/div[1]/div/div")).click(); 
     driver.findElement(By.className("vO")).sendKeys(tomailid); 
     driver.findElement(By.className("aoT")).sendKeys(emailsubject); 
        driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@tabindex='-1']"))); 

     WebElement printbody = driver.switchTo().activeElement(); 
     printbody.sendKeys(mailbody); 
     driver.switchTo().defaultContent(); 
     driver.findElement(By.xpath("//div[text()='Send']")).click(); 
    } 

} 
+3

Мы на самом деле не нужно узнать свой пароль gmail. – alecxe

ответ

0

Вам не нужно переключаться на рамку здесь. просто делать то же самое, как субъект и реципиентов

driver.findElement(By.className("Am")).sendKeys("some text"); 

Редактировать

Для вставки текста с подписью вы отправляете текст в сНу ребенка

driver.findElement(By.cssSelector(".Am > div")).sendKeys("some text"); 
+0

Ваш код работает, если я отключу параметр Подпись. Есть ли способ добавить текст с подписью? – robertredrain

+0

Другой вопрос: где вы нашли название класса «Am»? Когда я «Проверяю элемент» в составном теле письма, имя класса показывает «Am Al editable LW-avf», но это не работает. – robertredrain

+0

@robertredrain Я добавил решение для подписи – Guy

Смежные вопросы