# 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报告