Selenium Webdriver在Gmail中打开邮件

Selenium Webdriver在Gmail中打开邮件,selenium,gmail,automated-tests,webdriver,Selenium,Gmail,Automated Tests,Webdriver,我已经开始使用Webdriver来自动化我们的测试,这是100%手动的 在其中一个用例中,我需要单击发送到用户收件箱的链接。在这种情况下,我面临Gmail的问题。登录后,我不知道如何打开特定的电子邮件 我知道电子邮件主题等,但我无法使用它访问元素。Gmail以JSON的形式接收所有数据,然后通过js函数构建整个页面。因此,webdriver无法访问使用接收到的JSOn数据构建的任何元素 非常感谢您的帮助 谢谢, 克里斯。我想我没有答对你的问题,但我想你在gmail的搜索框中输入文本后,很难找到打

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

在其中一个用例中,我需要单击发送到用户收件箱的链接。在这种情况下,我面临Gmail的问题。登录后,我不知道如何打开特定的电子邮件

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

非常感谢您的帮助

谢谢,
克里斯。

我想我没有答对你的问题,但我想你在gmail的搜索框中输入文本后,很难找到打开邮件的定位器

//div[5]/div/div/table/tbody/tr[n]“//n是邮箱的行号,对于第一个结果使用1等

在点击元素之前,请将其用作元素的标识符


希望这有帮助。

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

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

请注意,如果主题太长,谷歌会切断主题,这会导致类似“主题…”的结果。在我们的自动测试环境中,我们使用一个唯一的数字来识别邮件。

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

xpath=//div [@class='y6']/span[contains(.,'<your original search text>')]
xpath=//div[@class='y6']/span[包含(,'')]
已找到该对象,但单击未打开邮件

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

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

<td>mouseDown</td>
<td>xpath=//div[@class='y6']/span[contains(.,'£10 OFF when you spend £30 or more online')]</td>
<td></td>
mouseDown
xpath=//div[@class='y6']/span[包含(,'在线消费30英镑或以上可享受10英镑折扣])]
在IDE中


希望这能有所帮助。

我建议不要使用用户界面来验证Gmail。Gmail的用户界面极其复杂,这是一个陷阱。对我来说,使用selenium实现自动化根本不是一个解决方案

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


在运行webdriver测试时,如果您希望收到电子邮件,则在执行某些操作后,然后使用轮询(如果不是即时的,则为特定超时)对于背景中带有特定“主题”或“发件人”等的电子邮件。一旦找到电子邮件,然后从电子邮件内容中抓取链接,然后使用

模拟单击。在我的例子中,我使用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();

希望这能有所帮助!

下面的selenese命令可以:

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

单击第一封/最近一封/最上面一封邮件的
FROM
字段,进入邮件详细信息页面//注意:
tr
第一封邮件,
tr[2]
第二封邮件,依此类推。

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");

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

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

这里
i
是您想要的邮件号码

试试这个,对我来说非常合适。这将选择随机邮件,您也可以根据需要修改

    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()

我尝试了下面的代码,但它对我无效。我正在尝试在gmail收件箱中打开电子邮件。WebDriver driver=new FirefoxDriver();loginToGmail(driver);WebElement mailLink=driver.findElement(By.xpath(//div[5]/div/div/table/tbody/tr[1]”);System.out.println(“mailLink.getText():“+mailLink.getText());此链接用于打开邮件。使用邮件链接。单击()。而且,在你们国家,gmail的呈现方式很可能与我国不同,在这种情况下,XPath将不同。首先使用selenium IDE进行尝试,如果可以的话,将其放入代码中。它无法定位元素,因此调用click方法毫无意义。我尝试使用Selenium IDE,记录了我的操作并点击了邮件。但是IDE没有为目标节点提供任何信息。我注意到表的id是:p3,并尝试使用://table[@id=':p3']获取和处理它。也不起作用。并非所有元素都可单击。请使用ClickAt,并且目标应位于表的tbody内。当前您正在导航至表,请查看此标记的子元素,这将有tr-这是收件箱中的邮件行。我说,我无法找到表元素。因此,调用其上的任何方法或检索其子元素都是不可能的。+1如果您不测试Gmail接口,而只是测试邮件进程(接收或发送),那么另一种解决方案将更可取。谷歌不断改变用户界面的实现,以防止脚本编写,因此每次发生这种情况时,您的自动测试都会中断。使用一个你有100%控制权的服务。如果我能反复投票,我会的。所有人,为了神圣的爱,请不要使用Selenium或WebDriver自动化GMail的用户界面。请向下滚动,并以多数票跟随答案,而不是曾经被接受为正确答案的答案。