我有一个包含多个字段的网页。在那里,我有几个必填字段,如果我输入更新按钮而不输入必填字段,它必须显示错误。所以现在我想测试一下是否会出现特定的错误信息,然后我还要测试剩余的字段。
这是我的代码:
public class TestProfileCompanyDetailsPage
{
WebDriver driver;
@Test
public void verifyProfileCompanyDetailsPage() throws Exception
{
driver = DriverInIt.getInstance().getDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);
login.verifyLoginVendors();
VendorsHomePageApp vhpapp=PageFactory.initElements(driver, VendorsHomePageApp.class);
vhpapp.clickOnProfileTab();
ProfileCompanyDetailsPage proCompDetPage=PageFactory.initElements(driver, ProfileCompanyDetailsPage.class);
proCompDetPage.clickOnCompDetEdit();
proCompDetPage.clickAndEnterCompName("IBM");
proCompDetPage.clickOnUpdateButton();
}
public boolean IsTestElementPresent(WebDriver driver)
{
try
{
driver.findElement(By.xpath("html/body/section/div/div/div[1]/div[3]/p[2]/span"));
return true;
}
catch(NoSuchElementException e)
{
return false;
}
}
}
以下是Page:
HTML code:
<p class="mB10px" style="padding-left: 20%;">
<button class="btn btn-success" style="width: 120px;" ng-click="saveVendor(1)" ng-class="{"cbc-btn-spin":persist==1}">Update</button>
<span class="btn-link mL5px vBot pointer" ng-click="cancelVendor(1)">Cancel</span>
</p>
<p class="mB10px show" ng-class="{"show":uiVendorError1.length>0}" style="display: none; padding-left: 20%;">
<span class="error ng-binding" ng-bind="uiVendorError1">Please enter Company Description</span>
</p>
<p class="mB10px" ng-class="{"show":uiVendorSuccess1.length>0}" style="display: none; padding-left: 20%;">
<span class="greenC ng-binding" ng-bind="uiVendorSuccess1"/>
</p>
答案 0 :(得分:2)
// do stuff to cause the error message to show up
Assert.assertTrue(driver.findElement(By.xpath("//*[text()='Please enter Company Description']")).isDisplayed());
在上面,如果错误消息不在那里,它会抛出异常。但是,这并不是很好,因为错误可能需要一段时间才能在验证后弹出,并且您的测试可能已经过测试以确定它是否存在。更好的解决方案是使用Web驱动程序等待并检查它是否在预期的时间段内可见。此外,请注意,如果错误消息具有ID,则选择该文件比使用匹配XPath的文本要好得多。更好的例子:
// do stuff to cause the error message to show up
new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[text()='Please enter Company Description']")));
这将等到错误消息可见(该元素为其true
方法返回isDisplayed
)。如果它在10
秒内无法显示,则会抛出TimeoutException
。请注意,这只是如何检查元素的一个示例,通常最好在测试中捕获该异常,并使用更好,更具描述性的错误消息使断言失败。
要检查多个字段,只需使用您希望它们匹配的各种字符串调用的辅助方法,并使用变量而不是硬编码应匹配的文本。如果文本有任何引号(单引号或双引号),也要小心,因为这可能导致无效的XPath。
答案 1 :(得分:1)
在这种情况下,您应该尝试使用ExpectedConditions
等待您的元素包含一些带有自定义public boolean IsTestElementPresent(WebDriver driver)
{
try
{
WebDriverWait wait = new WebDriverWait(driver, 10);
return wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
WebElement el = d.findElement(By.cssSelector("span.error.ng-binding"));
return (el.getText().length() > 0);
}
});
}catch(TimeoutExceptione e)
{
return false;
}
}
的文字,如下所示: -
public boolean IsTestElementPresent(WebDriver driver)
{
try
{
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., 'Please enter Company Description')]")));
return true;
}catch(TimeoutExceptione e)
{
return false;
}
}
已修改: - 如果您想获取包含错误消息的元素,请尝试以下操作: -
{{1}}
希望它有所帮助.. :)