WebDriver + TestNG Gmail出现了一个奇怪的错误

时间:2014-03-02 16:59:52

标签: java selenium xpath gmail

我尝试自动从Gmail发送电子邮件并使用TestNG和Page Object模式,浏览器FireFox,但首先是代码的一部分=)

我正在查看带有帮助注释(页面对象模式)的定位器,然后转到我在测试中使用的函数。

@FindBy (how=How.XPATH, using = "//div[@class='T-I J-J5-Ji T-I-KE L3']")
public WebElement writeMail;

@FindBy (how=How.XPATH, using = "//textarea[@class='vO']")
public WebElement adressTo;

@FindBy (how=How.XPATH, using = "//input[@class='aoT']")
public WebElement subjectOfMail;

@FindBy (how=How.XPATH, using = "//body[@role='textbox']")
public WebElement contentMail;

@FindBy (how=How.XPATH, using = "//div[@class='T-I J-J5-Ji aoO T-I-atl L3']")
public WebElement sendMail;

public void writeMail(String adress, String subject) {
    writeMail.click();
    adressTo.sendKeys(adress);
    subjectOfMail.sendKeys(subject);
    webDriver.switchTo().frame(webDriver.findElement(
            By.xpath("//iframe[contains(@tabindex,'1') and contains(@frameborder,'0')]"))); 
    webDriver.findElement(By.xpath("//body[@role='textbox']")).sendKeys("Test");
    webDriver.switchTo().defaultContent();
    sendMail.click();
}
据称必须工作,但记录仅在地址和主题字段中,并且在该测试失败后在日志中:

" Unable to locate element: {"method":"xpath","selector":"//body[@role='textbox']"}"

但如果我发表评论

//adressTo.sendKeys(adress);
//subjectOfMail.sendKeys(subject);

webdriver按计划切换到iframe,并在信函正文中写入文字,然后点击“发送”按钮。

请向我解释一下,为什么这段代码可以作为一个简单的java应用程序正常工作,但在我的示例中我在我的测试(TestNG)中使用它时却无法正常工作?

2 个答案:

答案 0 :(得分:1)

嗯,问题的解决方案在How to type Gmail Body text in Selenium2 (Webdriver) using Java找到了,但我想知道为什么旧的hpath工作得如此奇怪。大家都感谢您的关注。

答案 1 :(得分:0)

您正在使用<body>搜索@role='textbox'元素:

//body[@role='textbox']

但您要查找的元素实际上是<div>容器:

<div id=":c9" class="Am Al editable LW-avf" hidefocus="true" aria-label="Inhalt der Nachricht" g_editable="true" role="textbox" contenteditable="true" tabindex="1" style="direction: ltr; min-height: 416px;"><br></div>

所以请改用以下XPath:

//div[@role='textbox']