如何使用Selenium java通过GMail自动发送附件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Selenium java通过GMail自动发送附件相关的知识,希望对你有一定的参考价值。

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

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

有谁知道我附加文件的错误是什么?

答案

这应该是你的autoit .exe路径而不是.jpg路径。您需要创建自动编写的可执行(.exe)并通过我提到的。

Runtime.getRuntime().exec("path of Autoit exe"); // like "C:\\AutoIt3\\new.exe"
另一答案

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

  • 如果你正在使用,通过smtp设置有单独的GMail插件。
  • 如果您使用的是Maven,则可以使用postman插件。
  • 使用commons直接从您的测试代码发送电子邮件api。

在这个答案中,我将解释如何通过Maven使用commons email api。


Commons Email

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

以上是关于如何使用Selenium java通过GMail自动发送附件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用selenium登录gmail?我的代码无效[重复]

尝试通过 Selenium 和 Python 使用 GeckoDriver Firefox 登录 Gmail 帐户时出现“此浏览器或应用程序可能不安全”错误

在 Visual Studio 中通过 C# (Selenium) 自动登录 Gmail

如何避免“元素当前不可见,因此可能无法与” Selenium Webdriver

如何在gmail中使用自定义字体?

如何使用 Selenium 和 Java 通过 PageFactory 等待元素不可见