文章目录
selenium安装
- java JDK 1.8
- idea 社区版
- maven 配置阿里云镜像资源库
第一段java-selenium测试代码
创建maven项目配置拍pom文件依赖
如果找不到对应版本,可以去中央镜像网站搜索:https://mvnrepository.com/ (网址我放这儿了)
<dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0-beta-3</version></dependency><!-- https://mvnrepository.com/artifact/org.testng/testng --><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.4.0</version></dependency></dependencies>
通过chromedriver(谷歌浏览器驱动文件打开百度)
packagecom.abtest;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.chrome.ChromeDriver;importorg.testng.annotations.Test;importjava.nio.file.Path;importjava.nio.file.Paths;publicclassTestCase{publicWebDriver webDriver;@TestpublicvoidopenBaidu(){// 找到浏览器驱动Path p1 =Paths.get("src","drivers","chromedriver.exe");// 将其设置到系统中System.setProperty("webdriver.chrome.driver",p1.toAbsolutePath().toString());// 创建一个浏览器实例
webDriver =newChromeDriver();// 打开百度
webDriver.get("https://www.baidu.com");}}
规范化第一段java-selenium代码
这里的规范化主要是将测试的三个时期进行了规范处理。同时在测试过程中使用了通过id定位web组件(元素)
packagecom.abtest;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.chrome.ChromeDriver;importorg.testng.annotations.AfterClass;importorg.testng.annotations.BeforeClass;importorg.testng.annotations.Test;importjava.nio.file.Path;importjava.nio.file.Paths;publicclassTestCase{publicWebDriver webDriver;// 对整个测试类运行之前所做的操作@BeforeClasspublicvoidsetUpEnv(){// 找到浏览器驱动Path p1 =Paths.get("src","drivers","chromedriver.exe");// 将其设置到系统中System.setProperty("webdriver.chrome.driver",p1.toAbsolutePath().toString());// 创建一个浏览器实例
webDriver =newChromeDriver();}@TestpublicvoidopenBaidu()throwsInterruptedException{// 打开百度
webDriver.get("https://www.baidu.com");// 使用By.id获取元素
webDriver.findElement(By.id("kw")).sendKeys("Helloword");
webDriver.findElement(By.id("su")).click();// 线程休眠3000毫秒,这里需要使用异常处理,否则会报错(重要)Thread.sleep(3000);}@AfterClasspublicvoidtearDownEnv(){// 关闭浏览器
webDriver.quit();}}
元素定位方式
通过name或者class对web元素进行定位
几乎和通过id定位元素的方式同理
@TestpublicvoidtestName()throwsInterruptedException{
webDriver.findElement(By.name("wd")).sendKeys("HelloWorld");
webDriver.findElement(By.className("bg")).click();Thread.sleep(3000);}
通过xpath对元素进行定位
另外xpath表达式可以在网页上右键-检查-找到相应组件-右键-copy-copyXpath
@TestpublicvoidtestXpath()throwsInterruptedException{// 这里增加3秒延迟时间保证元素能被刷出来// 否则会出现错误信息:"org.openqa.selenium.ElementNotInteractableException: element not interactable"Thread.sleep(3000);// 这里我重新找了一个网页:https://cn.bing.com/
webDriver.findElement(By.xpath("//*[@id=\"images\"]/a")).click();Thread.sleep(3000);}
模拟鼠标滑动事件
// 模拟鼠标滑动事件@TestpublicvoidtestAction(){Actions actions =newActions(webDriver);// 第一步找到 链接按钮WebElement moreBtn = webDriver.findElement(By.xpath("//*[@id=\"s-top-left\"]/div/a"));// 将鼠标移动到链接按钮
actions.moveToElement(moreBtn);// 找到展示出来的新元素WebElement mp3Link = webDriver.findElement(By.xpath("//*[@id=\"s-top-more\"]/div[8]/a/img"));// 将鼠标移动到链接按钮
actions.moveToElement(mp3Link).click().perform();}
Action拖拽百度地图规划路线
@TestpublicvoidtestDragandDrop()throwsInterruptedException{// 跳转到百度地图页面
webDriver.get("https://map.baidu.com/");Thread.sleep(3000);// 找到地图的mask组件WebElement mask = webDriver.findElement(By.id("mask"));// 添加事件处理Actions actions =newActions(webDriver);// 右键之后等待1秒延迟
actions.moveToElement(mask).contextClick().pause(1000);// 设置起点WebElement cmitem_start = webDriver.findElement(By.id("cmitem_start"));
actions.moveToElement(cmitem_start).click();// 拖拽地图// 按下鼠标左键不松开
actions.clickAndHold();// 按偏移量进行拖拽,参数分别为x偏移量;y偏移量
actions.moveByOffset(200,100);// 松开鼠标
actions.release();// 右键之后等待1秒延迟
actions.contextClick().pause(1000);// 设置终点WebElement cmitem_end = webDriver.findElement(By.id("cmitem_end"));
actions.moveToElement(cmitem_end).click();// 执行以上action中的所有动作
actions.perform();}
谷歌浏览器做窗口切换
@TestpublicvoidtestSwitchWindows()throwsInterruptedException{
webDriver.findElement(By.xpath("//*[@id=\"s-top-left\"]/a[6]")).click();// 获取当前窗口String currentWindow = webDriver.getWindowHandle();// 获取所有的窗口Set<String> allWindows = webDriver.getWindowHandles();// 用加强for循环遍历所有的windowfor(String window:allWindows){// 如果新的窗口不是当前的窗口if(window != currentWindow){// 将窗口切换进去
webDriver.switchTo().window(window);}}//Thread.sleep(10);
webDriver.findElement(By.id("kw")).sendKeys("美女");
webDriver.findElement(By.xpath("//*[@id=\"homeSearchForm\"]/span[2]/input")).click();
webDriver.switchTo().window(currentWindow);
webDriver.findElement(By.id("kw")).sendKeys("邯郸埋尸案");}
frame组件定位
@TestpublicvoidtestSwitchFrame()throwsInterruptedException{// 跳转到我们有frame组件的网页
webDriver.get("https://login.anjuke.com/login/form");// 找到我们需要的frame组件WebElement iframe = webDriver.findElement(By.id("iframeLoginIfm"));// 切换到我们的frame组件位置
webDriver.switchTo().frame(iframe);// 找到frame组件中的输入框然后输入对应字符信息
webDriver.findElement(By.id("phoneIpt")).sendKeys("13212341234");}
设置隐式的最长等待时间(不推荐)
隐式等待时间表示的是全局的等待时间:无论是找到还是找不到都会等待那么多时间
缺点:让测试项目整体的等待时间变长
@TestpublicvoidtestImplicity(){// 设置最长隐式等待时间为10s
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));WebElement frame = webDriver.findElement(By.id("layui-layer-iframe1"));
webDriver.switchTo().frame(frame);
webDriver.findElement(By.id("mobilephone")).sendKeys("1234567890");}
设置显示的等待时间(推荐)
@Test
public void testTimeOut(){
// 设置最长显示等待时间为20秒
WebDriverWait wait = new WebDriverWait(webDriver,20);
// 设置提前结束等待条件
WebElement frame = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("layui-layer-iframe1")));
webDriver.switchTo().frame(frame);
webDriver.findElement(By.id("mobilephone")).sendKeys("1234567890");
}
版权归原作者 乐正龙牙lox 所有, 如有侵权,请联系我们删除。