java+selenium制作web端自动化测试代码

这个倒是很久之前写的了,代码看起来可能有点乱,凑合看吧()

 

毕竟java写这个不是主流。

需要先在maven文件中加入两个包依赖

selenium镜像地址(https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java

TestNG镜像地址(https://mvnrepository.com/artifact/org.testng/testng)

 图中代码如下:

//当前使用的是使用人最多的版本,并非最新版selenium
<dependencies>
	<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
</dependency>
//使用的是6.8.8版本的TestNG
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.8.8</version>
    <scope>test</scope>
</dependency>
</dependencies>

然后将浏览器驱动如Chrome浏览器的驱动Chromedriver.exe(记得下载的时候,看看自己的谷歌浏览器是什么版本,如果版本不适配,则不适用),放置在src文件中新建的目录drivers中(D:\java+selenium\src\drivers\chromedriver.exe)然后再将chromedriver引入到文件中。

其实这一块的代码是根据b站网课自学的,所以说注释比较多,看起来比较乱

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;

import java.nio.file.Path;
import java.nio.file.Paths;

public class test {
    public WebDriver webDriver;
    @Test
    public void openBaidu(){
    	//引入Chromedriver
        Path p1= Paths.get("src","drivers","chromedriver.exe");
        System.setProperty("webdriver.chrome.driver",p1.toAbsolutePath().toString());
        //创建浏览器实例
        webDriver=new ChromeDriver();
        
        //打开百度
        webDriver.get("https://www.baidu.com");
        //定位百度的搜索框元素,并且输入数据(ID定位) ——唯一的
        //webDriver.findElement (By.id("kw")).sendKeys("腾讯课堂");
        //定位百度的搜索枉元素,并且输入数据(Name定位) ——会重复
        //webDriver.findElement(By.name("wd")).sendKeys("腾讯课堂");
        //定位到百度的搜索抵元素,并且输入数据(tagName)——找到的元素是会有多个——不推荐	
        //webDriver.findElement(By,tagName("input")).sendKeys("腾讯课堂");
        //定位到百度的搜索框元素,并且输入数据(className定位)
        //webDriver.findElement(By.className("s_ipt")).sendKeys("腾讯课堂");
        //Compound class names not permitted -->复合类名的问题(不能放入符合类名,只能放入唯一的类名,否则会找错样式)
        //webDriver.findElement(By.className("s_btn")).click();
        //定位”新闻”元素,并且点击(LinkText定位) --> 超链接完整文本
        //webDriver.findElement(By.linkText("新闻")).click();
        //定位”新闻”元素,并且点击(partialLinkText定位) --> 超链接部分文本
        //webDriver.findElement(By.partialLinkText("新闻")).click();
        //cssSelector元素定位
        //(1) tagName定位
        //webDriver.findElement(By.cssSelector("input"));
        //(2)id定位(需要在id前面加入一个“#”作为标识符,例:#id)
        //webDriver.findElement(By.cssSelector("#kw")).sentKeys("腾讯课堂");
        //(3)根据className定位(需要在样式名前加入一个“.”,例:.s_btn)
        //webDriver.findElement(By.cssSelement(.s_ipt)).sentKeys("腾讯课堂");
        //webDriver.findElement(By.cssSelement(.bg.s_btn)).click();
        //定位到百度一下,根据cssSelector定位可以用多种样式,但是每个样式前需要加.
        // css精确定位
        //根据元素属性,属性名=属性值,id,class,等都可写成这种形式,单属性:By.cssSelector("标签名[属性名=属性值]");
        //如:By.cssSelector("input[name='xxx']");
        //多属性
        //By.cssSelector(“标签名[属性1=属性值][属性2=属性值]”);
        //单属性
        //webDriver.findElement(By.cssSelector("input[maxlength='255']")).sentKeys("腾讯课堂");
        //多属性
        //webDriver.findElement(By.cssSelector("input[maxlength='255'][autocomplete='off']")).sentKeys("腾讯课堂");
    }
}



//元素操作API
// getTagName ()
//获取元素的的标签名

// getAttribute(属性名)
// 根据属性名获取元素属性值

//getText()
//获取当前元素的文本值

//isDisplayed()
//查看元素是否显示

//WebDriver相关API
//get(String url)
//访问指定url页面

//getCurrentUrl()
//获取当前页面的url地址

//getTitle()
//获取当前页面的标题

//getPageSource()
//获取当前页面源代码

//quit()
//关闭驱动对象以及所有相关的窗口

//close()
//关闭当前窗口

//getWindowHandle()
//返回当前页面句柄

//getWindowHandles()
//返回所有由驱动对象打开页面所有的句柄,页面不同,句柄不一样

//manage()
//此方法可以获取Optiona--浏览器菜单操作对象
driver.manage().window()

//navigate对象
//Navigation navigation=driver.navigate()
//获取navigate对象

//navigation.to(url)
//访问指定的url地址

//navigation.refresh()
//刷新当前页面

//navigation.back()
//浏览器回退操作

//navigation.forward()
//浏览器前进操作

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.nio.file.Path;
import java.nio.file.Paths;

public class test2 {
    private static void openChrome() {
        //打开浏览器
        Path p1 = Paths.get("src", "drivers", "chromeDriver.exe");
        System.setProperty("webdriver.chrome.driver", p1.toAbsolutePath().toString());
        //创建浏览器实例
        chromeDriver = new ChromeDriver();
    }

    public static ChromeDriver chromeDriver;
    public static WebElement webElement2;

    public static void main(String[] args) throws test, InterruptedException {
        openChrome();
        // get(String url)
        //访问指定ur1页面
        chromeDriver.get("https://www.baidu.com");
        // 等待3s
        //Thread.sleep(3000);
        //chromeDriver.findElement(By.id("kw")).clear();//清理id为kw的输入框中的元素
        WebElement webElement1 = chromeDriver.findElement(By.id("kw"));
        chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
        chromeDriver.findElement(By.id("su")).click();//点击百度一下按钮
        // getTagName ()
        //获取元素的的标签名
        System.out.println("得到元素的标签名:" + webElement1.getTagName());
        // getAttribute(属性名)
        // 根据属性名获取元素属性值
        System.out.println("得到当前的maxlength属性:" + webElement1.getAttribute("maxlength"));
        webElement2 = chromeDriver.findElement(By.xpath("//a[text ()='设置']"));
        //getText()
        //获取当前元素的文本值
        System.out.println("得到元素的文本值:" + webElement2.getText());
        //isDisplayed()
        //查看元素是否显示
        System.out.println("元素是否显示" + webElement2.isDisplayed());
        // getCurrentUr1(
        // 获取当前页面的ur1地址
        System.out.println("当前的URI为:" + chromeDriver.getCurrentUrl());
        // getTitle()
        // 获取当前页面的标题
        System.out.println("当前的标题为:" + chromeDriver.getTitle());
        // getPageSource ()
        // 获取当前页面源代码
        //System,out,printIn("当前页面的源代码为:"+chromeDriver,getPageSource());/ / quit ()
        // 关闭驱动对象以及所有相关的窗口
        //chromeDriver.quit();
        //close()
        // 关闭当前窗口
        System.out.println("新窗口打开前的柄:" + chromeDriver.getWindowHandle());
        System.out.println("新窗口打开前的所有句柄:" + chromeDriver.getWindowHandles());
        Thread.sleep(3000);
        chromeDriver.findElement(By.xpath("//a[text()='的微博_微博']")).click();
        Thread.sleep(1000);
        System.out.println("新窗口打开后的句柄:" + chromeDriver.getWindowHandle());
        System.out.println("新窗口打开后的所有句柄:" + chromeDriver.getWindowHandles());
        //navigation对象
        WebDriver.Navigation navigation = chromeDriver.navigate();
        //访问京东
        navigation.to("https://www.jd.com");
        Thread.sleep(1000);
        //刷新网页
        navigation.refresh();
        Thread.sleep(1000);
        //回退
        navigation.back();
        Thread.sleep(1000);
        //前进
        navigation.forward();
        
    }
}
/*三大等待:硬性等待、隐式等待、显示等待
硬性等待:Thread.sleep(time)单位毫秒
隐式等待:driver.manage.timeouts().implicitlywait(long time(超时的时间),TimeUnit unit(时间的单位))
显示等待:WebDriver.Wait wait=new WebDriverWait();
                   WebElement element=wait.until(expectCondition);

显示等待的方法

visibilityOfElementLocated(By locator)等待元素在页面存在且可见

elementToBeClickable(By locator)页面元素是否在页面上可用和可被单击

elementToBeSelected(WedElement element)页面元素处于被选中状态

textToBePresentInElement(By locator)在页面元素中是否包含特定的文本

presenceOfElementLocated(By locator)页面元素在页面中存在*/

    public void openBaidu()throws InterruptedException{
//        webDriver.manage().window().maximize();//最大化浏览器
        //在driver实例化完成后设置隐形等待,设置超时的时间为5s
        // chromeDriver.manage().timeouts().implicitlyWait(time(超时的时间), unit(时间的单位));
//        chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        chromeDriver.get("https://www.baidu.com");//打开百度,测试的登录框的地址
//        定位百度的搜索框元素,并且输入数据(ID定位) ——唯一的
        chromeDriver.findElement (By.id("kw")).sendKeys("腾讯课堂");
        chromeDriver.findElement(By.id("su")).click();
        //代码执行太快,导致UI没有立马展示出来,造成两者不同步,从而元素找不到
//        Thread.sleep(3000);
        //显性等待,以ExpectedConditions.visibilityOfElementLocated为例
        WebDriverWait webDriverWait=new WebDriverWait(chromeDriver,5);
        webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()=' - 百度百科']")));

        chromeDriver.findElement(By.xpath("//a[text()=' - 百度百科']")).click();

    }
public void openBaidu() throws InterruptedException {
        //打开浏览器
        Path p1 = Paths.get("src", "drivers", "chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", p1.toAbsolutePath().toString());
        //创建浏览器实例
        chromeDriver = new ChromeDriver();
        //打开本地文件(因为是用的同一文件,因此这里没有更改)
        chromeDriver.get("D:\\VsCodeword\\newWork\\vue\\demo\\test.html");
        //点击按钮
        chromeDriver.findElement(By.id("abtn")).click();
        Thread.sleep(2000);
        //switchTo.alert 找到对应的alert提示框
        //Alert alert=chromeDriver.switchTo().alert();
        //点击提示框的确定
        //alert.accept();
        //取消或x掉提示框
        //alert.dismiss();
        //控制台打印弹出框的内容
        //System.out.println(alert.getText());
        Alert alert=chromeDriver.switchTo().alert();
        Thread.sleep(2000);
        //alert.accept();//点击确定,弹出1
        //alert.dismiss();//点击取消,弹出2
        //Thread.sleep(2000);
        //alert.accept();//点击回显1/2的弹框的确定
        System.out.println(alert.getText());
    }

/*#### 特殊元素定位与操作

##### ifame切换

driver.switchTo().frame(index);

driver.switchTo().frame(id);

driver.switchTo().frame(name);

driver.switchTo().frame(WebElement);

切换后回到默认内容页面(否则会找不到元素)

driver.switchTo().defaultContent();*/
public void iframe() throws InterruptedException {
        //打开浏览器
        Path p1 = Paths.get("src", "drivers", "chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", p1.toAbsolutePath().toString());
        //创建浏览器实例
        chromeDriver = new ChromeDriver();
        //打开本地文件(因为是用的同一文件,因此这里没有更改)
        chromeDriver.get("D:\\VsCodeword\\newWork\\vue\\demo\\test.html");
        chromeDriver.findElement(By.id("aa")).sendKeys("111");
        Thread.sleep(2000);
        chromeDriver.switchTo().frame("bframe");
        chromeDriver.findElement((By.id("bb"))).sendKeys("222");
        Thread.sleep(2000);
        chromeDriver.switchTo().frame("cframe");
        chromeDriver.findElement(By.id("cc")).sendKeys("333");
                //回到默认页面
        chromeDriver.switchTo().defaultContent();
        chromeDriver.findElement(By.id("aa")).clear();
        chromeDriver.findElement(By.id("aa")).sendKeys("回到了最外层");
    }
/*##### select下拉框

如果页面元素是一个下拉框,我们可以将此web元素封装为Select对象。

Select selece=new Select(WebElement element);

Select对象常用api

select.getOptions();//获取所有选项

select.selectByIndex(index);//根据索引选中对应的元素

select.selectByValue(value);//选择指定value值对应的选项

select.selectByVisibleText(text);//选中文本值对应的选项*/
    @Test
    public void select() throws InterruptedException {
        //打开浏览器
        Path p1 = Paths.get("src", "drivers", "chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", p1.toAbsolutePath().toString());
        //创建浏览器实例
        chromeDriver = new ChromeDriver();
        //打开本地文件(因为是用的同一文件,因此这里没有更改)
        chromeDriver.get("https://www.baidu.com");
        //打开百度的设置
        chromeDriver.findElement(By.id("s-usersetting-top")).click();
        //点击高级设置
        chromeDriver.findElement(By.xpath("//div[@id='s-user-setting-menu']/div/a[2]/span")).click();
        //找到时间选择下拉框
        chromeDriver.findElement(By.xpath("//span[@id='adv-setting-gpc']/div/div/i")).click();
        //根据索引去选择对应的选项
        chromeDriver.findElement(By.xpath("//span[@id='adv-setting-gpc']/div/div[2]/div[2]/p[3]")).click();
        //再次打开时间下拉框
        chromeDriver.findElement(By.xpath("//span[@id='adv-setting-gpc']/div/div")).click();
        //选择选项
        chromeDriver.findElement(By.xpath("//span[@id='adv-setting-gpc']/div/div[2]/div[2]/p[4]")).click();
    }

时间日期控件

如果可以手动输入则使用sendKeys方法输入时间

如果有限制输入,则可以执行一段js改变元素的value值

JavascriptExecutor jsExecutor=(JavascriptExecutor)driver;

jsExecutor.executeScript("…");

//时间日期控件处理
//普通可以输入的input类型时间日期控件
//chromeDriver,get("https://ww,fligay,com/?ttid=sem,000000736shlreferid-baidu.082076aroute source=seo");
//chromeDriver,findElement(By.xpath("//form[@id='j_FlightForm']//input[@name=('depDate']")).sendKeys ("2020-01-10");
//限制输入的时间日期控件chromeDriver.qet("https://www.12306.cn/index/");
//javascript执行对象
JavascriptExecutor javascriptExecutor =(JavascriptExecutor)chromeDriver;
//调用javascript去除id为train_date输入框内的readonly属性
javascriptExecutor.executecript("document.getElementById(\"train_date\").removeAttribute(\"readonly\") ");
Thread.sleep(1000);
chromeDriver,findElement(By,id("train_date")) .clear();
Thread.sleep(1000);
chromeDriver.findElement(By.id("train_date")).sendKeys("2020-01-10");



   //鼠标操作
   @Test
    public void shubiao() {
        Path p1 = Paths.get("src", "drivers", "chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", p1.toAbsolutePath().toString());
        chromeDriver = new ChromeDriver();
        //鼠标操作
        chromeDriver.get("http://www.treejs.cn/v3/demo/cn/exedit/drag.html");
        WebElement sourceElement = chromeDriver.findElement(By.id("treeDemo_2_span"));//定位移动的元素
        WebElement targetElement = chromeDriver.findElement(By.id("treeDemo_3_span"));//目标元素
        //实例化actions对象,鼠标的相关操作
        Actions actions = new Actions(chromeDriver);
        actions.clickAndHold(sourceElement).moveToElement(targetElement).release().build().perform();
    }
}

文件上传

分为两种情况: 类似于下面,使用sendKeys写入文件的路径<input type="file"id="fu" value="选择文件"> 如果文件上传不是input元素,而是使用的第三方的控件。并且不是input元素,那么这种情况就很棘手了,必须要使用一些第三方的工具,比如autoit等来完成。

chromeDriver,findElement(By.xpath("//input[@value='选择文件(value值)']")),sendKeys("本地的文件地址,记得\的转义");
Thread.sleep(2000);
chromeDriver.findElement(By.xpath("//input[@value='上传']")).click();

大概就是这些,抛砖引入,可能我有些地方写的比较乱,请多多见谅。

GitHub - 854524301/javaAuto at master

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于JavaSeleniumWeb UI自动化测试框架是一种自动化测试工具,可以用于测试Web界面的功能和用户交互。以下是该框架的一些关键特性和优势。 1. 支持多浏览器和平台:这个框架可以在各种主流浏览器(如Chrome、Firefox、Safari等)和操作系统(如Windows、Mac、Linux等)上运行,确保网站在不同环境下的兼容性。 2. 灵活的对象识别:通过使用Selenium的定位策略(如ID、CSS选择器、XPath等),该框架可以准确地识别页面上的元素,从而使测试用例的编写更加简单和可靠。 3. 数据驱动测试:该框架支持数据驱动测试,可以从外部源(例如Excel、CSV等)中加载测试数据,并对每个数据组合执行相同的测试用例,从而提高测试效率和可重复性。 4. 测试报告和日志:这个框架提供了详细的测试报告和日志记录功能。测试报告会提供关键的测试执行结果,如成功率、失败率和跳过率,并展示每个用例的执行状态。日志记录则可以帮助开发人员在调试期间查找问题和进行错误分析。 5. 高可扩展性:该框架可以根据项目需要进行定制和扩展。开发人员可以编写自定义函数和库,以便进行特定的测试操作和验证。 总之,基于JavaSeleniumWeb UI自动化测试框架提供了一种可靠、高效和可扩展的方式来测试Web界面。它可以帮助团队快速检测和修复潜在的缺陷,提高软件质量和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值