html - 为什么Gmail会改变某些元素的id元素?

标签 html selenium gmail

这是 Gmail 中的一个元素,正是“撰写”按钮。查看 id,当我没有未读消息时它是“:il”。

<div id=":il" class="aic">
<div class="z0">
<div class="T-I J-J5-Ji T-I-KE L3" tabindex="0" role="button" style="-moz-user-select: none;" gh="cm">COMPOSE</div>
</div>
</div> 

现在我只是给自己发了一封电子邮件,然后注销我的帐户并重新登录。当我检查元素时,id 已更改为“:3l”。

<div id=":3l" class="aic">
<div class="z0">
<div class="T-I J-J5-Ji T-I-KE L3 T-I-JO" tabindex="0" role="button" style="-moz-user-select: none;" gh="cm">COMPOSE</div>
</div>
</div>

然后我阅读邮件,注销并重新登录。当我读取元素时,我得到了原始 ID“:il”。

为什么Gmail会改变一些元素的id元素?我正在使用 WebDriver 和 Java,这让我发疯。可能我必须更改定位此元素的方式。

最好的问候!

添加了我的测试代码:

public static void main(String[] args) 
{
    WebDriver driver;
    String baseUrl;

    driver = new FirefoxDriver();
    baseUrl = "https://www.google.com.ar/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

    driver.get(baseUrl + "/?gfe_rd=cr&ei=Tf_YVKv1G6yB8Qe_24HYDA&gws_rd=ssl");
    driver.findElement(By.linkText("Gmail")).click();
    driver.findElement(By.id("Passwd")).clear();
    driver.findElement(By.id("Passwd")).sendKeys("Not neccesary :D");
    driver.findElement(By.id("Email")).clear();
    driver.findElement(By.id("Email")).sendKeys("Not_neccesary_:D");
    driver.findElement(By.id("signIn")).click();

    //APARENTLY THERE ARE PROBLEMS WHEN I HAVE MESSAGES UNREADED

    driver.findElement(By.xpath("//div[.='COMPOSE']")).click();
    driver.findElement(By.id(":uv")).sendKeys("Not_neccesary_:D@gmail.com");
    driver.findElement(By.id(":ul")).sendKeys("Test");
    driver.findElement(By.id(":vn")).sendKeys("aaaaaaaaaaa");
    driver.findElement(By.id(":ub")).click();

    driver.close();
}

最佳答案

Gmail 不应使用 WebDriver 实现自动化。出于这个原因,他们故意使 id 动态化。你也为谷歌工作吗?您正在为谷歌测试 gmail 吗?如果不使用 WebDriver 来自动化 gmail 对我来说没有意义而且只是浪费时间。

您是否在您的应用程序中测试发送电子邮件的内容并且您想要确保电子邮件已发送、您想要验证内容或可能是点击链接或其他什么?做这些事情的最好方法是在后台使用像 JavaMail 这样的库和使用 Gmails pop3 服务器。这种方法将为您提供一致的结果,并且速度会快得多。您不必启动浏览器、与元素交互等。您还可以支持任何电子邮件提供商,而不仅仅是 Gmail,只要您有他们的 pop3 服务器详细信息。

查看我对类似问题的回答here

关于html - 为什么Gmail会改变某些元素的id元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28445319/

相关文章:

javascript - 根据浏览器窗口大小流畅地调整所有图像的大小

html - Flexbox:悬停在::after 元素上时按钮移动

div 内的 HTML 有序列表

javascript - 如何将 html 标题(工具提示)添加到 leaflet.js 多边形?

javascript - 将等待与 selenium web 驱动程序异步内容一起使用

Java-为什么 Selenium Chrome Webdriver 使用我的真实 IP 地址而不是代理

c# - 如何禁用 "Are you sure you want to leave this page"警报?

google-api - 有关 : Gmail Sidebar Gadget Deprecation 的问题

php - 连接到 Gmail IMAP PHP "Couldn' t 打开流”

html - GMail HTML 电子邮件制作图像 7000px 高