【测试开发之路】Java & Selenium自动化

一、概述与入门

1、Selenium介绍

​ 使用前需要下载浏览器对应的Driver,Selenium提供了EdgeDriver和ChromiumDriver两种驱动类。需要安装与本机浏览器版本相同的驱动。

​ EdgeDriver下载地址:Microsoft Edge WebDriver - Microsoft Edge Developer

​ ChromiumDriver下载地址:CNPM Binaries Mirror (npmmirror.com)

2、导入Maven库

(1)Selenium
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.4.0</version>
</dependency>

(2)TestNG[用于单元测试]
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.4.0</version>
    <scope>test</scope>
</dependency>

3、TestNG的使用

​ 参考博客:https://blog.csdn.net/lovedingd/article/details/106784561

​ TestNG是一个java中的开源自动化测试框架,其灵感来自JUnit和NUnit,TestNG还涵盖了JUnit4整个核心的功能,但引入了一些新的功能,使其功能更强大,使用更方便。

​ 其常用注解有:BeforeTest、Test、AfterTest、BeforeClass、AfterClass等

4、第一个Selenium的程序

​ 我们编写了一个单元测试类,通过@Test注解来标注测试方法。

public class TestCase {
    @Test
    public void openURL(){
        //获取driver路径
        Path driverPath = Paths.get("src","driver","msedgedriver.exe");
        //设置程序环境
        System.setProperty("webdriver.edge.driver",driverPath.toAbsolutePath().toString());
        WebDriver driver = new EdgeDriver();
        driver.get("https://www.baidu.com");
    }
}

​ 这里要注意msedgedriver.exe的位置是src/driver/msedgedriver.exe。

二、元素定位方式

​ 通过EdgeDriver的实例化对象的findElement()方法来获取相应的元素,并执行操作。

1、id属性定位

​ 这里通过By.id(“string”)的方式来获取元素,并执行了sendKeys(“文本内容”)和click()两种操作。

@Test
public void getElementById(){
	webDriver.get("https://www.baidu.com");
	webDriver.findElement(By.id("kw")).sendKeys("未来村村长");
	webDriver.findElement(By.id("su")).click();
}

2、name属性定位

webDriver.findElement(By.name("wd")).sendKeys("未来村村长");

3、class属性定位

webDriver.findElement(By.className("s_ipt")).sendKeys("未来村村长");

4、XPath定位⭐

​ XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。其常用表达式如下:

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从任意位置进行匹配
@选取属性
[]表示谓语,用于查询某个指定值的节点
*匹配任何元素节点
@*匹配任何属性节点
webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("未来村村长");

​ 浏览器检查-选中元素标签-右键-复制-复制xpath可快速获取XPath路径。

三、事件

1、鼠标滑动

​ 首先需要实例化Actions对象,然后传入WebDriver对象。先找到相应的元素,存储到WebElement对象中,然后通过actions实例化对象去模拟鼠标事件[moveToElement],再执行相应动作,最后需要perform来开始执行动作。

public void getElementById(){
	webDriver.get("https://www.baidu.com");
	Actions actions = new Actions(webDriver);
	WebElement element1 = webDriver.findElement(By.xpath("//*[@id=\"s-top-left\"]/div/a"));
	actions.moveToElement(element1);
	WebElement element2 = webDriver.findElement(By.xpath("//*[@id=\"s-top-more\"]/div[3]/a[3]/img"));
	actions.moveToElement(element2).click();
	actions.perform();
}

2、浏览器窗口切换

​ 浏览器窗口切换首先需要通过webDriver的getWindowHandle()方法获取窗口定位字符串,然后通过webDriver的switchTo().window(定位字符串)进行切换。

@Test
public void getElementById(){
	webDriver.get("https://www.baidu.com");
	String baidu = webDriver.getWindowHandle();
	webDriver.findElement(By.xpath("//*[@id=\"s-top-left\"]/a[3]")).click();
	Set<String> windows = webDriver.getWindowHandles();
	webDriver.switchTo().window(baidu);
}

3、iframe窗口切换

​ 当网页内嵌了iframe时,需要先切换到相应的iframe才能执行操作。iframe页面也是一个WebElement元素,可以通过findElement()方法获取,然后通过switchTo().frame(iframe)进行切换。

WebElement iframe = webDriver.findElement(By.id("iframe-id"));
webDriver.switchTo().frame(iframe);

4、设置等待时间

(1)最长等待时间

​ 当页面加载较慢时,我们可以先进行等待,该等待使后序操作执行回旋,直到执行成功则放弃等待时间。

webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
(2)确定等待时间
WebDriverWait wait = new WebDriverWait(webDriver,Duration.ofSeconds(10));
WebElement element = wait.until(ExceptedConditions.presenceOfElementLocated(By.id("xxx")));
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来村村长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值