Я автоматизировал Gmail для отправки писем с вложениями. Письмо содержит встроенный текст подписи отправителя. Каждый раз, когда я хочу ввести что-либо в теле письма, текст всегда появляется после поля «С уважением» и имени. Ниже мой код.

driver.findElement(By.xpath(".//*[text()= 'COMPOSE']")).click();
wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//textarea[contains(@aria-label, 'To')]")));
driver.findElement(By.xpath(".//textarea[contains(@aria-label, 'To')]")).click();
driver.findElement(By.xpath(".//textarea[contains(@aria-label, 'To')]")).sendKeys("abcd@gmail.com");
driver.findElement(By.name("subjectbox")).click();
driver.findElement(By.name("subjectbox")).sendKeys("efgh");
driver.findElement(By.xpath("(.//*[@aria-label='Message Body'])[2]")).click();
driver.findElement(By.xpath("(.//*[@aria-label='Message Body'])[2]")).sendKeys("This is an auto-generated mail");

Одно из решений, которое я использую, выглядит следующим образом:

driver.findElement(By.xpath("(.//*[@aria-label='Message Body'])[2]")).click();
String s = "Sir,\n This is a auto generated email. \n\n" 
    + driver.findElement(By.xpath("(.//*[@aria-label='Message Body'])[2]")).getText();
driver.findElement(By.xpath("(.//*[@aria-label='Message Body'])[2]")).clear();
driver.findElement(By.xpath("(.//*[@aria-label='Message Body'])[2]")).sendKeys(s);

Вместо этих двух строк: driver.findElement (By.xpath ("(.// [@ aria-label = 'Текст сообщения']) [2]")). click (); driver.findElement (By.xpath ("(.// [@ aria-label = 'Message Body']) [2]")). sendKeys ("Это автоматически сгенерированное письмо");

Но это решение фактически удаляет весь формат текста подписи. Даже с текстом подписи я не могу получить xpath текстового поля с помощью Firebug, мне нужно удалить полный текст подписи, чтобы получить их. Я новичок в этой области автоматизации. Помогите, пожалуйста, как можно написать текст в теле письма перед текстом подписи.

0
Samiran Banerjee 18 Апр 2016 в 09:11

4 ответа

Лучший ответ

@Samiran Banerjee

Просто используйте приведенный ниже код:

driver.findElement(By.cssSelector(".Am.Al.editable.LW-avf>br")).click();
driver.findElement(By.cssSelector(".Am.Al.editable.LW-avf")).sendKeys("This is an auto-generated mail");

Это будет напечатано перед вашей подписью.

Но введите «Кому» и «Тема», а затем подождите одну или две секунды.

1
noor 18 Апр 2016 в 12:00

Привет, пожалуйста, попробуйте, как показано ниже

public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        System.setProperty("webdriver.chrome.driver", "D:\\eclipseProject\\StackOverFlow\\chromedriver_win32 (1)\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        driver.get("https://accounts.google.com/ServiceLogin?");
        // gmail login
        driver.findElement(By.id("Email")).sendKeys("XXXXXXXXXXX.com");
        driver.findElement(By.id("next")).click();
        Thread.sleep(1000);
        driver.findElement(By.id("Passwd")).sendKeys("XXXXXXXXXX");
        driver.findElement(By.id("signIn")).click();

        // some optional actions for reaching gmail inbox
        driver.findElement(By.xpath("//*[@title='Google apps']")).click();
        driver.findElement(By.id("gb23")).click();
        // clicks compose
        driver.findElement(By.cssSelector(".T-I.J-J5-Ji.T-I-KE.L3")).click();
        // types message in body without hampering signature
        driver.findElement(By.id(":pg")).sendKeys("This is an auto-generated mail");;

    }

Надеюсь, это решит вашу проблему. Посмотрите изображение для лучшего понимания.

enter image description here

Также см. id в исходном коде

enter image description here

1
eduliant 18 Апр 2016 в 08:45
public static void main(String[] args) throws InterruptedException {
    // TODO Auto-generated method stub
    System.setProperty("webdriver.chrome.driver", "D:\\eclipseProject\\StackOverFlow\\chromedriver_win32 (1)\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    driver.get("https://accounts.google.com/ServiceLogin?");
    // gmail login
    driver.findElement(By.id("Email")).sendKeys("XXXXXXXXXXX.com");
    driver.findElement(By.id("next")).click();
    Thread.sleep(1000);
    driver.findElement(By.id("Passwd")).sendKeys("XXXXXXXXXX");
    driver.findElement(By.id("signIn")).click();

    // some optional actions for reaching gmail inbox
    driver.findElement(By.xpath("//*[@title='Google apps']")).click();
    driver.findElement(By.id("gb23")).click();
    // clicks compose
    driver.findElement(By.cssSelector(".T-I.J-J5-Ji.T-I-KE.L3")).click();
    // types message in body without hampering signature
    driver.findElement(By.id(":pg")).sendKeys("This is an auto-generated mail");;

}
1
Eric Aya 31 Май 2017 в 09:43
class Gmail_1 {

    public static void main(String[] args) throws InterruptedException {

    System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();    
    driver.manage().window().maximize();
    String url = "https://accounts.google.com/signin";
    driver.get(url);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

    WebElement email_phone = driver.findElement(By.xpath("//input[@id='identifierId']"));
    email_phone.sendKeys("*******.com");
    driver.findElement(By.id("identifierNext")).click();
    WebElement password = driver.findElement(By.xpath("//input[@name='password']"));
    WebDriverWait wait = new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.elementToBeClickable(password));
    System.out.println("\ntest  password");
    password.sendKeys("a*******3");                     
    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 
    password.sendKeys(Keys.ENTER);
//    driver.findElement(By.className("ZFr60d")).click();
    driver.findElement(By.className("WaidBe")).click();
    System.out.println("Mail page opened");
    Thread.sleep(3000);
    driver.findElement(By.className("z0")).click();
    driver.findElement(By.className("vO")).sendKeys("****************.com");
    driver.findElement(By.className("aoT")).sendKeys("Test email from selenium");
    driver.findElement(By.className("Am")).sendKeys("Hi");
    driver.findElement(By.className("aoO")).click();



    }
}
1
Jerry George 10 Авг 2018 в 06:32