Java-Selenium

本文详细介绍了如何使用Java和Selenium进行Web自动化测试,包括环境配置、元素定位、API操作及JUnit5的用例管理。通过实例展示了如何打开页面、操作元素、切换窗口和iframe,并探讨了不同类型的等待策略。此外,还讲解了Selenium与JUnit5的结合使用,以实现测试用例的组织和执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java-Selenium

1:环境

Maven环境

		<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

2:八大定位方式

ID:

webDriver.findElement(By.id(""));

NAME:

webDriver.findElement(By.name(""));

XPATH:

webDriver.findElement(By.xpath("/html/body/form"));//绝对路径从html开始
webDriver.findElement(By.xpath("//form[@id="loginForm"]"));//相对路径
webDriver.findElement(By.xpath("//input[@name="continue"][@type="submit"]"));//通过属性和值

CLASSNAME:

webDriver.findElement(By.className(""));

CSS:

webDriver.findElement(By.cssSelector("input#kw"));//input的ID为kw  #表示ID
webDriver.findElement(By.cssSelector("input.kw"));//input的Class为kw .表示class

LINK:

webDriver.findElement(By.linkText(""));//精确定位
webDriver.findElement(By.partialLinkText(""));//模糊定位

TARNAME:

webDriver.findElements(By.tagName(""));

3:API操作

打开指定页面:

webDriver.get("http://www.baidu.com/");

关闭:

webDriver.quit();
webDriver.close();

窗口最大化:

webDriver.manage().window().maximize();

获取URL:

webDriver.getCurrentUrl();

获取可见元素文本:

ele.getText()

获取隐藏元素文本:

ele.getAttribute("textContent");

获取属性值:

ele.getAttribute("");

重定向:

webDriver.navigate().to("http://news.baidu.com/");

后退/前进/刷新:

webDriver.navigate().back();
webDriver.navigate().forward();
webDriver.navigate().refresh();

清空文本:

ele.clear();

下拉框:

//创建Select对象
Select select=new Select(ele);
//获取方式1
select.selectByVisibleText("");
//获取方式2
select.selectByValue("");
//获取方式3
select.selectByIndex();

三种等待:

强制等待:由Java提供

Thread.sleep(3000);

隐式等待:作用于页面上所有元素,只设置一次,在规定时间内元素加载,直接执行,不再等待,如果超出等待时间,抛出异常

//页面加载数值和单位 如果未加载完成则抛出异常
Wait.webDriver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
//隐式等待加载页面所有元素
Wait.webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);

显示等待:为某个特定的元素设置等待时间(例如登陆后进行断言)

//第一个参数为WebDriver对象,第二个参数为等待总时间单位为s,第三个参数为查看间隔时间单位为毫秒
WebDriverWait webDriverWait=new WebDriverWait(webDriver,5,1000);
        //显示等待获取元素的方式 new 接口的匿名子类重写apply方法
        WebElement webElement=webDriverWait.until(new ExpectedCondition<WebElement>() {
            @NullableDecl
            @Override
            public WebElement apply(@NullableDecl WebDriver webDriver) {
                return webDriver.findElement();
            }
        });

组合键:

//删除
kw.sendKeys(Keys.BACK_SPACE);
//空格
kw.sendKeys(Keys.SPACE);
//ctrl A
kw.sendKeys(Keys.CONTROL,"A");
//ctrl C
kw.sendKeys(Keys.CONTROL,"C");
//ctrl V
kw.sendKeys(Keys.CONTROL,"V");
//回车
kw.sendKeys(Keys.ENTER);

窗口切换:

//获取当前窗口句柄
String windowHandleOld = webDriver.getWindowHandle();
//获取所有窗口句柄
Set<String> windowHandles = webDriver.getWindowHandles();
//遍历句柄,如果切换后的url等于期望的则不在遍历,跳出循环
Iterator<String> iterator = windowHandles.iterator();
while (iterator.hasNext()){
	String next = iterator.next();
	webDriver.switchTo().window(next);
	Thread.sleep(1000);
	if("".equals(webDriver.getCurrentUrl())){
		break;
	}
}

iframe切换:

//通过iframe的webelement对象
WebElement ele = webDriver.findElement();
webDriver.switchTo().frame(ele);
//通过索引
webDriver.switchTo().frame();
//通过name或者Id
webDriver.switchTo().frame("");

//切换进主窗口
webDriver.switchTo().defaultContent();//返回最外面的窗口,主窗口
webDriver.switchTo().parentFrame();//返回上一级窗口

4:Junit5

1:所有用例前置方法

@BeforeAll
public static void beforeAll(){}

2:所有用例后置方法

@AfterAll
public static void afterAll(){}

3:各个用例前置方法

@BeforeEach
public void beforeEach(){}

4:各个用例后置方法

@AfterEach
public void afterEach(){}
### Java Selenium 自动化测试教程 #### 准备工作 为了能够顺利运行Java Selenium自动化测试,需先完成一系列准备工作。这包括安装JDK、配置环境变量以及下载必要的驱动程序如ChromeDriver或GeckoDriver等[^2]。 #### 创建Maven项目并引入依赖项 创建一个新的Maven项目,在`pom.xml`文件中加入如下依赖来获取最新的Selenium版本: ```xml <dependencies> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> <!-- Add other dependencies as needed, such as TestNG or JUnit for test frameworks --> </dependencies> ``` #### 编写简单的自动化脚本 下面是一个基本的例子,展示了如何利用Java编写一个简单的Selenium Webdriver程序,该程序会启动Google Chrome浏览器访问特定网站,并执行简单交互操作[^3]。 ```java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class SimpleTest { public static void main(String[] args){ System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); try{ String baseUrl = "http://www.example.com"; driver.get(baseUrl); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Selenium"); element.submit(); Thread.sleep(1000); // Wait for page to load System.out.println(driver.getTitle()); } catch (Exception e){ e.printStackTrace(); } finally { driver.quit(); } } } ``` 这段代码首先设置了ChromeDriver的位置路径,接着实例化了一个WebDriver对象用于控制浏览器行为;通过调用`get()`方法加载页面地址,再使用`findElement()`寻找页面上的HTML元素并与之互动;最后打印当前页面标题并安全退出浏览器。 #### 封装工具类简化编码流程 考虑到实际工作中频繁重复的基础功能实现,可以考虑构建一套自定义的辅助函数或是继承Page Object模式设计更高级别的抽象层,从而提高代码可读性维护效率[^4]。 例如,可以通过创建专门处理不同类型的WebElements的方法,使得每次想要与表单字段或其他UI组件打交道时不必每次都写出冗长的选择器表达式。这样不仅减少了错误发生的可能性,还让整个项目的逻辑更加直观易懂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值