Java 关于规范建设的建议
我尝试使用Katalon Studio和Selenium | testNG自动登录。我使用XML文件将浏览器值发送到脚本,我已将其粘贴到这里Java 关于规范建设的建议,java,selenium-webdriver,testng,qa,katalon-studio,Java,Selenium Webdriver,Testng,Qa,Katalon Studio,我尝试使用Katalon Studio和Selenium | testNG自动登录。我使用XML文件将浏览器值发送到脚本,我已将其粘贴到这里 public class TC_Testportal { private WebDriver driver; private String baseUrl; @Parameters("browser") @BeforeMethod public void beforeMethod(String
public class TC_Testportal {
private WebDriver driver;
private String baseUrl;
@Parameters("browser")
@BeforeMethod
public void beforeMethod(String browser) {
if (browser.equals("firefox")) {
System.setProperty("webdriver.gecko.driver", "drivers\\geckodriver.exe");
driver = new FirefoxDriver();
baseUrl = "https://test.com";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
} else if (browser.equals("chrome")) {
System.setProperty("webdriver.chrome.driver", "drivers\\chromedriver.exe");
driver = new ChromeDriver();
baseUrl = "https://test.com";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
}
@Test
public void tc001() {
driver.get(baseUrl);
//Empty user-name|password validation
driver.findElement(By.xpath("//input[@id='username']")).click();
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("");
driver.findElement(By.xpath("//input[@id='userpassword']")).click();
driver.findElement(By.xpath("//input[@id='userpassword']")).clear();
driver.findElement(By.xpath("//input[@id='userpassword']")).sendKeys("");
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::div[2]")).click();
System.out.println("Empty user-name|password validation - CHECKED");
//Empty password validation
driver.findElement(By.xpath("//input[@id='username']")).click();
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("test");
driver.findElement(By.xpath("//input[@id='userpassword']")).click();
driver.findElement(By.xpath("//input[@id='userpassword']")).clear();
driver.findElement(By.xpath("//input[@id='userpassword']")).sendKeys("");
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::button[1]")).click();
System.out.println("Empty password validation - CHECKED");
//Empty user-name validation
driver.findElement(By.xpath("//input[@id='username']")).click();
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("");
driver.findElement(By.xpath("//input[@id='userpassword']")).click();
driver.findElement(By.xpath("//input[@id='userpassword']")).clear();
driver.findElement(By.xpath("//input[@id='userpassword']")).sendKeys("123");
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::div[2]")).click();
System.out.println("Empty user-name validation - CHECKED");
}
@AfterMethod
public void afterMethod() {
driver.quit();
}
}
我只是想知道我的代码构造是否会被QA行业接受,因为我是测试自动化的新手。此外,如果它不在可接受的范围内,我将非常感谢您能给我指导,以提高我的知识
如果您对代码构造/代码质量/参数命名/测试用例编号等有任何建议,我们将不胜感激。由于您使用的是Katalon,因此它具有内置功能来存储所有对象(对象存储库),例如:“//input[@id='username']” 你可以搬到下面那个地方去
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("");
driver.findElement(By.xpath("//input[@id='userpassword']")).click();
driver.findElement(By.xpath("//input[@id='userpassword']")).clear();
driver.findElement(By.xpath("//input[@id='userpassword']")).sendKeys("");
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::div[2]")).click();
driver.findElement(By.xpath("//input[@id='username']")).click();
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("test");
driver.findElement(By.xpath("//input[@id='userpassword']")).click();
driver.findElement(By.xpath("//input[@id='userpassword']")).clear();
driver.findElement(By.xpath("//input[@id='userpassword']")).sendKeys("");
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::button[1]")).click();
driver.findElement(By.xpath("//input[@id='username']")).click();
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("");
driver.findElement(By.xpath("//input[@id='userpassword']")).click();
driver.findElement(By.xpath("//input[@id='userpassword']")).clear();
driver.findElement(By.xpath("//input[@id='userpassword']")).sendKeys("123");
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::div[2]")).click();```
and if you are using Katalon you don't need to call the browser drivers, since Katalon has those in their product
关于共享代码,需要注意的几件事
为了给你一个@Asanka在提到代码复制时所说的例子,请看一下这个。您经常会重复这段代码
driver.findElement(By.xpath("//input[@id='username']")).click();
driver.findElement(By.xpath("//input[@id='username']")).clear();
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("");
在不同的元素上
更好的方法是将所有三行放在一个方法中。让我们调用该方法sendKeyStore()
:
接下来,您可能会注意到元素的Xpath也重复了三次。因此,让我们将XPath提取为一个参数:
public static void sendKeysToElement(String xpathToElement){
driver.findElement(By.xpath(xpathToElement)).click();
driver.findElement(By.xpath(xpathToElement)).clear();
driver.findElement(By.xpath(xpathToElement)).sendKeys("");
}
这将简化您的测试(我只在//Empty password validation
部分向您展示这一点):
这就是所谓的干燥原则(不要重复)。进一步阅读和。感谢您的建议。我会遵循这些建议。我使用了Katalon studio(Chrome扩展)来获取此代码。我已导出为“(WebDriver+TestNG)”。然后我在eclipse中运行了它。在自动化测试中遵循这种方法是错误的吗?我认为您使用的是如上所述的记录和回放方法,开始很好,但在现实世界中,您需要以更易于维护的方式来设计和实现代码。我已经开始研究POM。我发现通过这种模式可以将冗余降至最低。非常感谢。我认为这是当前的方法(Katalon Recorder+Selenuim+TestNG)对于自动化测试。实际上我想用多个值(testNG数据提供程序)进行回归测试,所以我认为这是不考虑重复的最简单的方法。谢谢你的建议。非常感谢你的努力。这对我帮助很大,我使用了Katalon studio(Chrome extension)来获取此代码。我已导出为“(WebDriver+TestNG)”。然后我在eclipse中运行了它。在自动化测试中采用这种方法是错误的吗?那么您使用的是Katalon Recorder?没问题,没有错误或正确的方法。有有效的方法,也有无效的方法。这是一个良好的开端(使用记录器)但是,您可能希望切换到编码解决方案,例如Katalon Studio(而不是Recorder)或Selenium,因为它们为您提供了更多的选择和灵活性。谢谢@mate mrse,我认为这是最好的解决方案之一。我已经开始学习Selenium教程。我也将进一步学习Katalon。再次感谢您。
public static void sendKeysToElement(String xpathToElement){
driver.findElement(By.xpath(xpathToElement)).click();
driver.findElement(By.xpath(xpathToElement)).clear();
driver.findElement(By.xpath(xpathToElement)).sendKeys("");
}
//Empty user-name|password validation
sendKeysToElement("//input[@id='username']")
sendKeysToElement("//input[@id='userpassword']")
driver.findElement(By.xpath("(.//*[normalize-space(text()) and normalize-space(.)='SIGN IN'])[1]/following::div[2]")).click();
System.out.println("Empty user-name|password validation - CHECKED");