Webdriver:编写用户定义函数的正确方法是什么

时间:2016-11-26 16:13:58

标签: selenium-webdriver

我正在编写一个登录函数,我希望此函数在出现错误/意外情况时正常退出。例如:当我输入密码时,如果文本字段已更改/不存在,我希望函数退出消息说密码字段不存在。功能状态应为"失败"和确切的失败消息。它应该处理可能发生的任何其他异常。正确使用此功能的正确方法是什么,以便我可以在我编写的处理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;
    }

1 个答案:

答案 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更慢,更容易变脆,并且在浏览器中支持不一致。