我正在编写一个登录函数,我希望此函数在出现错误/意外情况时正常退出。例如:当我输入密码时,如果文本字段已更改/不存在,我希望函数退出消息说密码字段不存在。功能状态应为"失败"和确切的失败消息。它应该处理可能发生的任何其他异常。正确使用此功能的正确方法是什么,以便我可以在我编写的处理Web对象的未来函数中遵循这种做法?
public boolean Login(String userName, String password, String url)
{
_driver= new FirefoxDriver();
_driver.manage().window().maximize();
_driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
_driver.get(url);
_driver.findElement(By.Xpath(".//*[id='usename']")).sendKeys(userName);
_driver.findElement(By.Xpath(".//*[id='pword']")).sendKeys(password);
_driver.findElement(By.Xpath(".//*[id='btn']")).click();
String title = _driver.getTitle();
boolean pass;
if (title.toLowerCase().contains("homepage"))
{
pass=true;
}
else
{
Assert.fail("Manager home page not opened after login");
pass=false;
}
return pass;
}
答案 0 :(得分:1)
您可能希望删除驱动程序设置并从您的函数导航到初始URL。您的函数应仅登录...以匹配名称Login()
。如果要使用页面对象模型,可以执行类似
主脚本看起来像
_driver = new FirefoxDriver();
_driver.manage().window().maximize();
_driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
_driver.get(url);
LoginPage loginPage = new LoginPage(_driver);
loginPage.Login(userName, password);
Assert.assertTrue(_driver.getTitle().contains("homepage"), "Log in successful");
虽然LoginPage类看起来像
public class LoginPage
{
WebDriver _driver;
public LoginPage(WebDriver driver)
{
_driver = driver;
}
public void Login(String userName, String password)
{
_driver.findElement(By.id("usename")).sendKeys(userName);
_driver.findElement(By.id("pword]")).sendKeys(password);
_driver.findElement(By.id("btn")).click();
}
}
顺便说一下,我将您的定位器更改为使用By.id()
而不是XPath。您应该避免使用XPath,除非绝对必要...通过包含文本等来查找元素。从By.id()
开始然后使用By.cssSelector()
...如果这两个不起作用,那么请回到XPath的。 XPath更慢,更容易变脆,并且在浏览器中支持不一致。