0

我是第一次进行自动化测试,我希望能够自动化 gmail 并发送带有附件的电子邮件。我正在使用 selenium 网络驱动程序、黄瓜和谷歌浏览器来运行测试。我的 IDE 是 IntelliJ。我的测试一直有效,直到我必须附加文件:

public void givenOnAmazonProductPage() throws Throwable {
    setupSeleniumWebDrivers();
    goTo(PRODUCT_URL);
    driver.findElement(By.id("identifierId")).sendKeys("username");
    driver.findElement(By.xpath("//span[@class='RveJvd snByac']")).click();
    Thread.sleep(3000);
    driver.findElement(By.name("password")).sendKeys("password");
    driver.findElement(By.xpath("//span[@class='RveJvd snByac']")).click();
    Thread.sleep(4000);
    goTo(PRODUCT_URL);
    //driver.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("//span[@class='T-I J-J5-Ji T-I-KE L3']")).click();
    //driver.close();
    //click on attachment
    driver.findElement(By.xpath("//div[@class='a1 aaA aMZ']")).click();
    //use autoit tool to attach a file 

这是我尝试附加桌面上的文件但它似乎不起作用的地方

 Runtime.getRuntime().exec("C:Desktop/6c3bfdec92fad54896275802f938bd83.29.jpg");
    // enter the file path onto the file-selection input field


    Thread.sleep(10000); //wait for 10sec to upload file
}

有谁知道我在附加文件时做错了什么?

4

2 回答 2

1

这应该是您的autoit.exe 路径而不是 .jpg 路径。您需要创建(.exe)您的 autoit 脚本的可执行文件并通过我已经提到的。

Runtime.getRuntime().exec("path of Autoit exe"); // like "C:\\AutoIt3\\new.exe"
于 2019-03-10T15:53:50.170 回答
0

即使不使用Selenium ,也有几种简单的方法可以自动发送带有附件的电子邮件,如下所示:

  • 如果您使用的是 ,则可以通过设置为GMail提供单独的插件。smtp
  • 如果您使用的是Maven,则可以使用postman插件。
  • 直接从您的测试代码中使用公共电子邮件 API

在这个答案中,我将解释如何通过Maven使用公共电子邮件 api


公共电子邮件

Commons Email旨在提供一个用于发送电子邮件的 API。它建立在 Java Mail API 之上,旨在简化它。

提供的一些邮件类别如下:

  • SimpleEmail- 此类用于发送基于基本文本的电子邮件。
  • MultiPartEmail- 此类用于发送多部分消息。这允许带有内联或附加附件的文本消息。
  • HtmlEmail- 此类用于发送 HTML 格式的电子邮件。它具有 MultiPartEmail 的所有功能,允许轻松添加附件。它还支持嵌入式图像。
  • ImageHtmlEmail- 此类用于发送带有内嵌图像的 HTML 格式的电子邮件。它具有 HtmlEmail 的所有功能,但将所有图像引用转换为内联图像。
  • EmailAttachment- 这是一个简单的容器类,可以轻松处理附件。它用于 MultiPartEmail 和 HtmlEmail 的实例。

  • Maven依赖

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-email</artifactId>
        <version>1.5</version>
    </dependency>
    
  • 代码块:

    package SendEmailAttachments;
    
    import org.apache.commons.mail.DefaultAuthenticator;
    import org.apache.commons.mail.EmailAttachment;
    import org.apache.commons.mail.EmailException;
    import org.apache.commons.mail.MultiPartEmail;
    
    public class EmailAttachments {
    
        public static void main(String[] args) throws EmailException {
    
            System.out.println("===Test for Sending CommonsEmail started===");  
            // Create the attachment
            EmailAttachment attachment = new EmailAttachment();
            attachment.setPath("C:\\Users\\AtechM_03\\Desktop\\Screenshots\\bad_indentation.png");
            attachment.setDisposition(EmailAttachment.ATTACHMENT);
            attachment.setDescription("Picture of bad indentation");
            attachment.setName("BadIndentation");
            // Create the email message
            MultiPartEmail email = new MultiPartEmail();
            email.setHostName("smtp.gmail.com");
            email.setSmtpPort(465);
            email.setAuthenticator(new DefaultAuthenticator("Matthew@Zoltak.in", "Matthew_Zoltak"));
            email.setSSLOnConnect(true);
            email.setFrom("CommonsEmail@gmail.com");
            email.setSubject("CommonsEmail Test");
            email.setMsg("CommonsEmail test mail ... :-)");
            email.addTo("Matthew@Zoltak.in");
            // add the attachment
            email.attach(attachment);
            // send the email
            email.send();
            System.out.println("===Test for Sending CommonsEmail ended===");
        }
    }
    
  • 控制台输出:

    ===Test for Sending CommonsEmail started===
    ===Test for Sending CommonsEmail ended===
    
  • 快照:

apache_commons_email_attachment

于 2019-03-11T10:28:10.050 回答