# WebTest **Repository Path**: test-dev-qa/web-test ## Basic Information - **Project Name**: WebTest - **Description**: java + selenium + testng Webui自动化测试框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-07-28 - **Last Updated**: 2024-07-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1、在gitee 创建仓库 登录gitee页面新建一个仓库用来存放后面的代码 2、安装git 在终端执行安装命令 apt install git 设置git的账户 git config –global user.name “Your Name” git config –global user.email “youremail@example.com” 3、idea创建maven项目并同时创建git仓库 4、pom.xml文件中添加selenium和testng 在maven中央仓库需要需要的jar   org.seleniumhq.selenium   selenium-java   3.141.59   org.testng   testng   6.14.3   test 5、下载chrome webdriver 下载chrome webdriver,并放在src/test/resources下 6、编写第一个测试代码 package testcases; ​ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; import org.testng.annotations.Test; ​ public class LoginCases { ​   @Test   public void loginSuccess(){       // 设置chrome浏览器       System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver");       WebDriver driver = new ChromeDriver();       // 设置浏览器最大化       driver.manage().window().maximize();       // 访问网址       driver.get("https://cloud.jxycrm.com/pc/#/login?redirect=%2Findex");       // 输入手机号       driver.findElement(By.xpath("//*[@id=\"pane-account\"]/form/div[3]/div/div/input")).sendKeys("19991937139");       // 输入密码       driver.findElement(By.xpath("//*[@id=\"pane-account\"]/form/div[4]/div/div/input")).sendKeys("fengxj930405");       // 点击登录按钮       driver.findElement(By.xpath("//*[@id=\"pane-account\"]/form/button")).click();       // 等待用户名是否存在       WebDriverWait wait = new WebDriverWait(driver, 5);       boolean displayed = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='userinfo']//span[@class='btn-text']"))).isDisplayed();       Assert.assertTrue(displayed);   } } 7、执行testng 创建testng.xml,使用插件或者复制一个放在根目录 右击testng.xml,点击run,执行用例 8、测试报告 默认的testng报告 勾选Use default reporters 重新执行后,在根目录生成test-output目录,在该目录下能够找到生成的html,用浏览器打开 9、log 添加maven依赖 log4j log4j 1.2.17 在resources下新建一个logj.properties文件 ### 根logger 设置### log4j.rootLogger = INFO,console,file ### 输出信息到控制台 ### log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = [%p] %d{HH:mm:ss} method: %l----%m%n ### 输出INFO级别以上的日志文件设置(因为根配置的是INFO) ### log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File = logs/log.log log4j.appender.file.Append = true log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = %d{HH:mm:ss} method: %l - [ %p ] ----%m%n 10、PageFactory package pageObjects; import org.apache.log4j.Logger; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.testng.Reporter; public class LoginPage { private static Logger log =Logger.getLogger(LoginPage.class); // 元素定位 // 手机号输入框 @FindBy(xpath = "//*[@id=\"pane-account\"]/form/div[3]/div/div/input") WebElement phoneInput; // 密码输入框 @FindBy(xpath = "//*[@id=\"pane-account\"]/form/div[4]/div/div/input") WebElement passwordInput; // 登录按钮 @FindBy(xpath = "//*[@id=\"pane-account\"]/form/button") WebElement loginButton; // 业务逻辑和操作方法 // 登录方法 public void login(String phone,String password) throws InterruptedException { Thread.sleep(3000); phoneInput.sendKeys(phone); log.info("输入手机号:"+ phone); Reporter.log("输入手机号:"+ phone); passwordInput.sendKeys(password); log.info("输入密码:"+ password); Reporter.log("输入密码:"+ password); loginButton.click(); log.info("点击登录按钮"); Reporter.log("点击登录按钮"); } } package pageObjects; import org.apache.log4j.Logger; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.testng.Reporter; public class LoginPage { private static Logger log =Logger.getLogger(LoginPage.class); // 元素定位 // 手机号输入框 @FindBy(xpath = "//*[@id=\"pane-account\"]/form/div[3]/div/div/input") WebElement phoneInput; // 密码输入框 @FindBy(xpath = "//*[@id=\"pane-account\"]/form/div[4]/div/div/input") WebElement passwordInput; // 登录按钮 @FindBy(xpath = "//*[@id=\"pane-account\"]/form/button") WebElement loginButton; // 业务逻辑和操作方法 // 登录方法 public void login(String phone,String password) throws InterruptedException { Thread.sleep(3000); phoneInput.sendKeys(phone); log.info("输入手机号:"+ phone); Reporter.log("输入手机号:"+ phone); passwordInput.sendKeys(password); log.info("输入密码:"+ password); Reporter.log("输入密码:"+ password); loginButton.click(); log.info("点击登录按钮"); Reporter.log("点击登录按钮"); } } 10、将浏览器信息放入config browser.type=chrome chrome.webdriver=src/test/resources/chromedriver.exe package browser; import org.apache.log4j.Logger; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class Browser { private static Logger log = Logger.getLogger(Browser.class); public static Properties properties = new Properties(); static { // 解析config.properties获取浏览器配置信息 try { InputStream in = Browser.class.getClassLoader().getResourceAsStream("config.properties"); properties.load(in); } catch (IOException e) { log.error("解析发生异常: " + e.getMessage()); } } public WebDriver openBrowser(){ String type = properties.getProperty("browser.type"); WebDriver driver = null; if("chrome".equalsIgnoreCase(type)){ System.setProperty("webdriver.chrome.driver",properties.getProperty("chrome.webdriver")); driver = new ChromeDriver(); driver.manage().window().maximize(); } return driver; } } 11、使用Allure报告