0


selenium软件使用教程,基于java-idea、maven

文章目录

selenium安装

  1. java JDK 1.8
  2. idea 社区版
  3. 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");

}

本文转载自: https://blog.csdn.net/qq_62678419/article/details/137059321
版权归原作者 乐正龙牙lox 所有, 如有侵权,请联系我们删除。

“selenium软件使用教程,基于java-idea、maven”的评论:

还没有评论