Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于规范建设的建议_Java_Selenium Webdriver_Testng_Qa_Katalon Studio - Fatal编程技术网

Java 关于规范建设的建议

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

我尝试使用Katalon Studio和Selenium | testNG自动登录。我使用XML文件将浏览器值发送到脚本,我已将其粘贴到这里

    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 

关于共享代码,需要注意的几件事

  • 我看到你复制了相同的代码。前任 findElement(By.xpath(//input[@id='username'])。单击(); 有3个副本。 复制是不好的,因为它会使代码难以维护和读取
  • 在单个@test中测试3个测试场景 最好将此测试分为3个测试或使测试用例数据驱动
  • 尝试将代码模块化,这样可以提高可重用性。例如@BeforeMethod内容可以移动到单独的DriverManager类中,并使其可用于所有测试
  • 尝试采用类似的设计模式

  • 为了给你一个@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");