我尝试自动从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)中使用它时却无法正常工作?
答案 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']