第一个使用 Maven 和 Java 的 Selenium,

First Selenium using Maven and Java,

我已经使用 Selenium Web 驱动程序、Maven 和 Java 编写了我的第一个代码。如果我的方向正确并且可以改进此特定代码,有人可以提供专家意见吗?

public class myFirstTest {
    @Test
    public void startWebDriver(){
        WebDriver driver = new FirefoxDriver();
        driver.navigate().to("http://www.ft.com/home/uk");
        Assert.assertTrue("title should start with World Business", driver.getTitle().equals("World business, finance, and political news from the Financial Times - FT.com"));

        driver.findElement(By.id("ftLogin-signIn")).click();
        driver.findElement(By.xpath("/html/body/div[4]/div[2]/div[1]/div[2]/div[2]/div[3]/form/fieldset[1]/input")).sendKeys("xxx@mail.com");
        driver.findElement(By.id("ftLogin-password")).sendKeys("xxxxxxxx");
        driver.findElement(By.xpath("/html/body/div[4]/div[2]/div[1]/div[2]/div[2]/div[3]/form/fieldset[3]/p[1]/button")).submit();

        driver.quit();

    }
}

绝对可以改进您编写的代码。 考虑到您刚刚开始使用 WebDriver,以下是一些建议 -

  • 避免使用如此长的 xpath 来定位元素。它有很多 对 DOM 的依赖。尽可能使用短的 xpath 或者去 使用其他定位器。
  • 您可以从测试所需的文件中读取数据。(例如:用户名、密码)
  • 如果您使用任何单元测试框架来运行您的测试,例如 JUnit、TestNG,您可以使用 @BeforeClass、@BeforeMethod 等注释。

  • 根据您是在学习还是在为您的公司创建测试框架,这里有一些建议。

    1. 您用于查找元素的函数和值不是最佳的。 cssSelector 或 id 是首选。

    ;

    By.cssSelector("input[id$='ftLogin-username']");
    

    By.id("ftLogin-username");
    

    除非绝对必要,否则切勿使用 xpath。特别是那些依赖于 DOM 对象的。而是更改网页实现以在网页元素上设置 id。

    对于没有唯一 class 或 ID 的按钮,我会使用文本代替

    driver.findElement(By.cssSelector("button:(*'Sign in'*)")); 
    
    1. 如果要在多个测试用例中使用此登录部分,请改为创建一个具有登录功能的助手 class。否则你必须一遍又一遍地编写相同的代码。如果要更改 id 或 xpath,您还必须更新所有使用该元素的测试用例。

    2. 在测试用例末尾添加断言,验证登录是否成功