第一个使用 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 等注释。
根据您是在学习还是在为您的公司创建测试框架,这里有一些建议。
- 您用于查找元素的函数和值不是最佳的。 cssSelector 或 id 是首选。
;
By.cssSelector("input[id$='ftLogin-username']");
或
By.id("ftLogin-username");
除非绝对必要,否则切勿使用 xpath。特别是那些依赖于 DOM 对象的。而是更改网页实现以在网页元素上设置 id。
对于没有唯一 class 或 ID 的按钮,我会使用文本代替
driver.findElement(By.cssSelector("button:(*'Sign in'*)"));
如果要在多个测试用例中使用此登录部分,请改为创建一个具有登录功能的助手 class。否则你必须一遍又一遍地编写相同的代码。如果要更改 id 或 xpath,您还必须更新所有使用该元素的测试用例。
在测试用例末尾添加断言,验证登录是否成功
我已经使用 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,以下是一些建议 -
根据您是在学习还是在为您的公司创建测试框架,这里有一些建议。
- 您用于查找元素的函数和值不是最佳的。 cssSelector 或 id 是首选。
;
By.cssSelector("input[id$='ftLogin-username']");
或
By.id("ftLogin-username");
除非绝对必要,否则切勿使用 xpath。特别是那些依赖于 DOM 对象的。而是更改网页实现以在网页元素上设置 id。
对于没有唯一 class 或 ID 的按钮,我会使用文本代替
driver.findElement(By.cssSelector("button:(*'Sign in'*)"));
如果要在多个测试用例中使用此登录部分,请改为创建一个具有登录功能的助手 class。否则你必须一遍又一遍地编写相同的代码。如果要更改 id 或 xpath,您还必须更新所有使用该元素的测试用例。
在测试用例末尾添加断言,验证登录是否成功