一、概述与入门
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)进行切换。文章来源:https://www.toymoban.com/news/detail-531973.html
WebElement iframe = webDriver.findElement(By.id("iframe-id"));
webDriver.switchTo().frame(iframe);
4、设置等待时间
(1)最长等待时间
当页面加载较慢时,我们可以先进行等待,该等待使后序操作执行回旋,直到执行成功则放弃等待时间。文章来源地址https://www.toymoban.com/news/detail-531973.html
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")));
到了这里,关于【测试开发之路】Java & Selenium自动化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!