selenium课堂

selenium课堂

学习selenium从这里开始。。。

driver.get(url) 登录URL

	打开网址		
   driver.get(url);		
   一般我们会紧跟一个窗口最大化操作
   driver.manage().window().maximize();

openNewTab(String url) 打开新的标签页

	selenium 本身是没有打开一个新标签的功能的,便是我们可以selelnium提供的执行js的函数,来实现这个操作。
	JavascriptExecutor js = (JavascriptExecutor) driver;
	js.executeScript(script, args);
	然后再切换到新打开的窗口或者叫TAB页。
	我把这两个动作封闭在两个方法里:
	在新窗口中打开新的url,然后切换到这个新的标签页面上。
	executeJScript(url);
	switchToLastWindow();

click()点击元素

	selenium提供的默认点击方法是针对元素的:		webelement.click();
	我针对这个方法做发封闭,可以使用多种参数形式
	### click(By by)  ,by 就是driver.findElement(by);
	by 有很多种形式:
	1、比如我们常用的定位xpatth:driver.findElement(By.xpath(xpathExpression))
		click(By.xpath("//button[@name='submit']"))
	2、还有cssSelector定位:driver.findElement(By.cssSelector(cssSelector))
		click(By.cssSelector(".loginFooter-btn-adminLogin"))
	### click(WebElement webelement)
	WebElement submitEle = driver.findElement(By.xpath("//button[@name='submit']"));
	click(submitEle);

sendKeys()输入元素

	selenium默认的输入方法是这样的 webelement.sendKeys(keysToSend);
	实际使用中,这个函数不是很好用。有时候会出现输入不进去。而且我们在input文本框中输入字符时,应该是先把鼠标定位到输入框,然后清空输入框中的内容,最后才填入我们要输入的字符。我针输入做了一个封装,把这些操作都包含进去:
			Actions actions = new Actions(driver);
			actions.moveToElement(element);
			actions.click(element);
			clearInputText(element);
			actions.sendKeys(sendString);
			actions.build().perform();
			sleep(600);
			logger.info("sendKeys成功,  " + sendString + " , " + getByValueOfelement(element));

driver.getWindowHandles() 切换窗口

	我们在点击页面上的一个超连接时,有时候会打开一个新的窗口或者叫新TAB页,为了能够让selenium识别到新的窗口工作,我们要告诉它去哪个窗口工作。
	这个时候我们就要用selenium切换窗口的函数。
	// 获取所有页面的句柄,
	Set<String> allWindows = driver.getWindowHandles();
	getWindowHandles()返回的是一个set集合,set集合是没有重复的,所以我们也可以知道窗口的句柄是无重复的。
	按照使用场景,我封装成了这么几个常用的:
	1、switchToTargetWindowHandle(int pageNumber)   pageNumber=1,2,3... 切换到目标窗口
	2、switchToLastWindow()   切换到最后一个窗口(标签页)
	3、switchBetweenTwoWindows()   两个窗口之间的切换

driver.switchTo().defaultContent() 切换Iframe窗口

	Iframe这个HTML标签其实已经不常用了,但是我工作中的部分老牌web页面中还是会用这个,一个页面中嵌套另一个url的页面。
	Iframe虽然在页面布局上是在一个页面里,但实际上他是属于另外一个HTML页面。所以要在这个页面中工作,也要切换到这个页面,我们称之为切换到iframe,
	跟切换窗口很类似。
	基本形式有两个,iframe标签的name属性,id属性。
	switchToIFrame(name)
	switchToIFrame(id)
	我把参数封装成3个形式可用,name和id都是string类型,还以用by定位iframe,以及iframe定义为一个WebElement类型。
	switchToIFrame(webelement)
	switchToIFrame(by)

element.getText() 获取元素的值

	这是selenium自带的方法,还算实用。同样实用的还有一个获取元素属性的值element.getAttribute("xxx"),比如class、title、id、style等等。

scrollIntoView(webelement) 拖动滚动条

	有时候页面很长,要点击的元素在页面上面,要滚动一屏才可以看到元素,这个时候可以用此方法把元素拖动到屏幕中间,这样就可以正常操作了。
	这里要说明一点了,一个元素之所以能够点击成功,是有先决条件的:
	1、元素对应的标签已经加载到DOM树中。
	2、元素在HTML页面上是显示的即可见的。
	3、元素是可点击的,没有被设置为只读。

execCMD(String cmd) 模拟在DOS窗口中执行命令行

	在windows中有很多命令可以供我们使用,也可以执行一些.exe文件的程序。也可以执行.bat文件类型的dos批处理脚本。
	这个方法,做了一个特别的处理,就是可以把dos窗口中的内容完整的显示出来。即执行一个命令,就可以看到打印出来的结果。可以命令的执行过程。

pauseStart() 暂停用例调试,从控制台输入go继续执行

	执行用例时,为了调试测试过程,使用此方法,可以让用例执行暂停,进行一行手工检查,或者需要手工处理一些操作后,然后再继续往下执行用例。

readFromScanner(String inputStr) 从控制台读取数据

	执行用例时,为了调试测试过程,使用此方法,临时给一个变量赋值。

isTextPresent(String findStrings) 在页面中查找文本

	 用到实现方式是selenium原生的获取页面的函数。driver.getPageSource().contains(findStrings);

getCurrentTime() 获取当前时间

	getCurrentTime() 默认返回的时间格式是:2021-03-02 11时04分08秒47
	有很多格式可以选择:
	getCurrentTime(“yyyy年MM月dd日HH时mm分ss秒SS”);
	getCurrentTime(“yyyy-MM-dd HH:mm:ss”);	
	G 年代标志符
	 y 年 
	 M 月 
	 d 日
	  h 时 在上午或下午 (1~12) 
	  H 时 在一天中 (0~23) 
	  m 分 
	  s 秒 
	  S 毫秒 
	  E 星期 一、星期 二、。。。
	  D 一年中的第几天 
	  F 0 、1、。。。 
	  W 一月中第几个星期  
	  w 一年中第几个星期 		 
	  a 上午 / 下午 
	  k 时   在一天中 (1~24) 
	  K 时  在上午或下午 (0~11) z 时区。		

OcrBaiduAip(String imagePath) 识别图片中的文字

    封装了百度的一个开源接口,使用这个方法,只需求输入图片的路径,就可以读取出图片的文字信息。
    OcrBaiduAip("D:\workspace\Selenium_Web_AutoTest\screenShot\2021年03月03日09时58分48秒93_截取元素.png");

mouseSingleClick() 模拟鼠标单击

mouseDoubleClick() 模拟鼠标双击

mouseMoveToElement() 模拟鼠标悬浮在元素上

keyEnter() 模拟按Enter键

waitHTMLloaded() 等待页面加载完成

waitForElementLoaded() 等待元素加载完成

waitForElementDisappear 等待元素消失不存在于DOM或不可见

上传文件

	有些业务上需要上传文件,附件。selenium虽然有自己的方式做到上传,sendKeys(),但是这个方法不是很好用。经常会出现点了上传按钮但是却没有上传。所以还是要借助一个工具autoIT  模拟浏览器的上传窗口操作。首先点击页面上的元素,打开上传窗口。然后用autoit编写好的程序uploadFile.exe
	使用方法是这样的:uploadFile.exe  +  浏览器  +  文件地址。这个程序可以使用的浏览器有chrome  ie  firefox
	String cmdStr ="uploadFile.exe  chrome   D:\workspace\Selenium_Web_AutoTest\screenShot\2021年03月03日09时58分48秒93_截取元素.png";
	execCMD(cmdStr)

多线程并发执行测试用例。

按照线程隔离的方式,编写测试用例,然后使用testng的多线程对测试用例中的@Test标记做并发执行。既然是要并发执行,所以@Test方法在编写时要做到独立运行,不能相互干扰对方的操作。特别说明一下,如果parallel=“classes”,测试用例中只会执行一个@Test,所以在编写的时候只可以有一个@Test可用。其它的@Test是不会被执行的。这算是testng的一个不足之处吧。反正testng是这么规定的。我们就遵循吧。

<test name="Concurrent">

    <classes>

        <class name="testCase.TestConcurrent" />

    </classes>

</test>

<listeners>
    <listener class-name="userMethod.AssertionListener"/>
</listeners>

测试用例参数化

参数化有两种方式,一种是把参数写在测试用例里,也可以说是写在代码里。另一种是写在excel表格中,从表格中读取。
@DataProvider(name = “displayInputTextFields”)
public static Object[][] dataBase3() {
return new Object[][] {{“姓名,客户全称,手机”},{“工作电话,个人邮箱,办公地址”},{“职称名称,创建人,所属区域”},{“QQ邮箱,QQ,微信”}};// ,个人博客,微博,家庭住址,住宅电话,MSN
}

@DataProvider(name = “provideExcel”)
public static Object[][] provideData() throws IOException {
Object[][] arrayObject = getExcelData(".\testdata.xlsx", “Sheet1”);
return arrayObject;
}

测试用例执行失败截图

使用Jenkins定时执行测试用例并查看报告

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值