Webdriver在Gmail中打开邮件

时间:2011-05-03 10:32:05

标签: selenium gmail automated-tests webdriver

我已经开始使用Webdriver自动化我们的测试,这是100%手动。

在其中一个用例中,我需要点击发送到用户收件箱的链接。在这种情况下,我遇到了Gmail问题。登录后,我无法弄清楚如何打开特定的电子邮件。

我知道电子邮件主题等但我无法使用它来访问该元素。 Gmail会将所有数据作为JSON接收,然后通过js函数构建整个页面。因此webdriver无法访问使用收到的JSOn数据构建的任何元素。

非常感谢任何帮助。

谢谢, 克里斯。

9 个答案:

答案 0 :(得分:10)

我建议不要使用UI来验证Gmail。 Gmail的用户界面非常复杂,这是一个陷阱。对我而言,使用硒自动化根本不是解决方案。

考虑使用JavaMail APIHTTPURLConnection。这就是我在类似的测试场景中所做的。

在运行webdriver测试时,在执行某些操作后,如果您希望发送电子邮件,然后使用JavaMail API轮询(对于某些超时,如果不是立即),对于背景中具有某些“主题”或“发件人”的电子邮件'等。找到电子邮件后,从电子邮件内容中抓取链接,然后使用HTTPURLConnection模拟点击

答案 1 :(得分:2)

如果您可以搜索特定的电子邮件,则可以使用以下代码找到您要查找的电子邮件:

//div [@class='y6']/span[contains(.,'<your original search text>')]

请注意,如果主题太长,谷歌会切断主题,从而产生类似“主题......”的内容。我们使用唯一编号来识别自动测试环境中的消息。

答案 2 :(得分:1)

我认为我没有正确回答您的问题,但我认为您在gmail的搜索框中输入文本后,无法找到定位器来打开邮件。

//div[5]/div/div/table/tbody/tr[n]" //n is the row no. of mailbox, for first result use 1 and like

在克隆之前将其用作元素的标识符。

希望这有帮助。

答案 3 :(得分:1)

就我而言,我通过使用Web驱动程序的Action类

找到了解决方案

先决条件:您的驱动程序需要移动到特定框架以定位元素

wd.switchTo().frame("canvas_frame");

步骤1)搜索使用以下代码

创建/生成的特定电子邮件
String searchvalue="html/body/div[1]/div[2]/div/div[1]/div[3]/div/div[1]/div[2]/div[2]/div/form/fieldset[2]/div/div/div[2]/input";
wd.findElement(By.xpath(searchvalue)).sendKeys(sendkeys);
String clickSearch=".//*[@id='gbqfb']";
wd.findElement(By.xpath(clickSearch)).click();

步骤2)现在使用Actions类进行导航。

Actions action= new Actions(wd);
    action.click(firstrecord).build().perform();

希望这会有所帮助!

答案 4 :(得分:0)

如果我们更换主题,上述答案对于在Gmail中识别邮件是正确的。 我已经尝试使用Selenium IDE来查找对象 目标为

xpath=//div [@class='y6']/span[contains(.,'<your original search text>')]

找到了该对象,但点击未打开邮件。

因此经过一些调查后我发现mouseDown方法正在使用上面的xpath来打开邮件。 所以命令将是

selenium.mouseDown("xpath=//div [@class='y6']/span[contains(.,'<your original search text>')]"); 

<td>mouseDown</td>
<td>xpath=//div[@class='y6']/span[contains(.,'£10 OFF when you spend £30 or more online')]</td>
<td></td>
在IDE中

希望这有帮助。

答案 5 :(得分:0)

以下selenese命令可以:

clickAt | //table/tbody/tr/td[5]/div[@class='yW'] |

点击第一张/最近/最多邮件的FROM字段,转到邮件详细信息页面。 //注意:第一封邮件为tr,第二封邮件为tr[2],依此类推。

答案 6 :(得分:0)

gmail正文的当前定位器是:

driver.findElement(By.className("LW-avf")).click();
driver.findElement(By.className("LW-avf")).clear();
driver.findElement(By.className("LW-avf")).sendKeys("your body message");

答案 7 :(得分:0)

试试这个,对我来说很完美。这将选择随机电子邮件,您也可以根据需要进行修改

    for i in xrange(int(num)):
    time.sleep(3)
    m=random.randint(1,10)
    print("Mail Number "+str(m)+" is selected")
    browser.find_element_by_xpath("//div[@role='tabpanel'][1]//table//tr"+str([m])).click()
    time.sleep(3)
    browser.find_element_by_xpath('//*[@id=":5"]/div[2]/div[1]/div/div[1]/div/div/div').click()

答案 8 :(得分:-1)

如果您想在Gmail中打开特定邮件,也可以使用此选项:

driver.findElement(By.xpath("//tr[i[td[4[div[contains(@class,'yW')]]]")).click();

此处i是您想要的邮件编号