【问题标题】:Unable to type text in email body for Selenium Java无法在 Selenium Java 的电子邮件正文中键入文本
【发布时间】:2016-01-24 04:42:48
【问题描述】:

我想创建发送 gmail 功能,但代码只能发送空正文 gmail。我猜帧切换不正确。有人可以告诉我哪个框架是 gmail 撰写的吗?我试图在网上搜索很多分辨率,但没有得到答案。因为 google 对 gmail html 的细节做了很大的改动,所以我找不到路。我是 selenium 的新手,所以如果你能弄清楚如何在 html 中找到框架,我将不胜感激。

非常感谢!

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 = "robertredrain@gmail.com";
        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 = "robertredrain@yahoo.com";
        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) - robertredrain@gmail.com - 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();
    }

}

【问题讨论】:

  • 我们真的不需要知道您的 gmail 密码。

标签: java selenium gmail


【解决方案1】:

您无需在此处切换到框架。只需对主题和收件人做同样的事情

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

编辑

要插入带有签名的文本,请将文本发送给 div 孩子

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

【讨论】:

  • 如果我禁用签名选项,您的代码将有效。有什么方法可以添加带有签名的文本吗?
  • 另一个问题是你在哪里找到类名“Am”?当我在撰写电子邮件正文中“检查元素”时,类名显示“Am Al editable LW-avf”,但这不起作用。
  • @robertredrain 我为签名添加了解决方案
  • @robertredrain 对于您的问题,“Am”、“Al”、“editable”和“LW-avf”是四个不同的类,您可以逐个定位您的元素,全部放在一起@987654323 @ 或使用其中的两个或三个。
  • 非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多