Selenium3 + Java 学习日记

本文详细介绍Selenium WebDriver在自动化测试中的应用,包括ChromeDriver环境配置、常用方法如打开网页、元素定位、窗口操作、下拉列表处理等,以及解决元素定位难题的技巧。还介绍了多窗口切换、元素等待策略、鼠标键盘操作、截图保存、弹窗处理和执行外部命令的方法。

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

原文链接:https://my.oschina.net/mexiaobai1315/blog/3009267

Mac下配置ChromeDriver环境

ChromeDriver下载解压后,移动到 /usr/local/bin/ 目录下

浏览器常用方法

  • 打开网页:
driver.get("url")
driver.navigate().to("url")
  • 浏览器后退
driver.navigate().back();
  • 浏览器前进
driver.navigate().forward();
  • 浏览器刷新
driver.navigate().refresh();
  • 窗口最大化
driver.manage().window().maximize()
  • 设置窗口大小
import org.openqa.selenium.Dimension;


Dimension di = new Dimension(100, 100);

driver.manage().window().setSize(di);
  • 获取当前页面的URL
driver.getCurrentUrl()
  • 获取当前页面的title
driver.getTitle()

WebDriver定位方式

  • By.id、By.name、By.className、By.tagName
  • By.linkText: 根据超链接的文本定位
  • By.partialLinkText: 根据部分超链接文本定位,用于定位的文本要和其他超链接文本区分开
  • By.xpath:根据xpath定位,
  • By.cssSelector: 根据cssSelector定位

WebDriver常用方法

  • sendKeys:输入文本
  • getAttribute:获取属性值
  • clear:清空文本框
  • isDisplayed:判断元素是否显示
  • isEnabled:判断元素是否可用
  • isSelected:判断元素是否选中
  • System.setProperty:设置参数
  • getText:获取值
  • submit:提交表单
  • getWindowHandle: 获取窗口句柄

下拉列表

import org.openqa.selenium.support.ui.*;


Select se = new Select(driver.findElement(By.id("")));

Actions ac = new Actions(driver);

ac.keyDown(Keys.SHIFT).click(se.getOptions().get(0)).click(se.getOptions().get(1)).keyUp(Keys.SHIFT).perform();

}

findElements 定位一组元素

findElements可以定位相同name或类名的一组元素

import java.uitl.List;


List<WebElement> li = driver.findElements(By.className(""));

for(WebElement element: li) {

    System.out.println(element.getText())

}

iframe

iframe元素会创建包含另外一个文档的内联框架,定位iframe内的元素时,需要先切换到iframe,否则会出现找不到元素的问题

driver.switchTo().frame(driver.findElement(By.id("iframe_id")));

//也可以直接通过iframe的name或ID进行定位

//driver.switchTo().frame("iframe_id_or_name");

driver.findElement(By.id("")) //定位iframe内的元素

//完成当前表单操作后,需要返回上一级表单

driver.switchTo().defaultContent();

标签无法定位的解决办法

QQ邮箱收件人地址输入框,通过input标签定位时,找不到元素,在网上找的其他解决办法。 思路是通过Actions点击元素,然后输入内容

import org.openqa.selenium.interactions.Actions


Actions ac = new Actions(dirver);

WebElement el = driver.findElement(By.id(""));

ac.click(el).sendKeys("").perform();

java执行外部程序或批处理命令

Runtime.getRuntime().exec("command")

截图,保存文件

//保存文件用到了FileUtils类,需要下载jar包

//地址:http://commons.apache.org/proper/commons-io/download_io.cgi

//把commons-io-2.4.jar 这个文件导入到你的项目中

import org.apache.commons.io.FileUtils;


File screenShot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.File);

try {

    FileUtils.copyFile(screenShot, new File("save_path.png"));

} catch (IOException e) {

    e.printStackTrace();

}

弹框处理

警告框 alert

警告框经常用于确保用户可以得到某些信息。 当警告框出现后,用户需要点击确定按钮才能继续进行操作

import org.openqa.selenium.Alert;


Alert alert = driver.switchTo().alert();

alert.accept(); //点击警告框的确认按钮

确认框 confirm

确认框用于使用户可以验证或者接受某些信息。 当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。

import org.openqa.selenium.Alert;


Alert alert = driver.switchTo().alert();

alert.accept(); //点击确认按钮

alert.dismiss(); //点击取消按钮

提示框 prompt

提示框经常用于提示用户在进入页面前输入某个值。 当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。

import org.openqa.selenium.Alert;


Alert alert = driver.switchTo().alert();

alert.sendKeys(""); //提示框中输入值

alert.accept(); //点击确认按钮

alert.dismiss(); //点击取消按钮

多窗口处理

webDriver的switchTo().window()可以在多个窗口直接切换

WebDriver driver = new ChromeDriver();

driver.get("http://www.sina.com.cn/");


Thread.sleep(5000);

String mainWindowHandle = driver.getWindowHandle();


// 打开其他链接

driver.findElement(By.linkText("体育")).click();

driver.findElement(By.linkText("娱乐")).click();


Set<String> set = driver.getWindowHandles();

for (String handle: set) {

    if(handle.equals(mainWindowHandle)) {

        driver.switchTo().window(mainWindowHandle);

        Thread.sleep(2);

        driver.close();

        break;
    }
}

元素等待

强制等待 Thread.sleep()

优点:使用简单 缺点:不能准确的掌握等待时间,大量使用会浪费时间,影响执行效率

Thread.sleep(2000); //休眠2S,单位是毫秒

隐式等待 implicitly_wait

设置一个最长的等待时间,如果在等待时间内页面加载完成,执行下一步,否则一直等到时间结束,然后执行下一步操作 只需设置一次,设置之后,在WebDriver对象实例整个生命周期都起作用 缺点:如果所需的页面元素已经加载完成,但整个网页还没有加载完成,仍要等待整个页面加载完成或超时才做执行下面的操作

driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS)

显式等待 WebDriverWait

以某个元素是否显示或点击作为等待的条件,更精准的控制等待时间

new WebDriverWait(driver, 30).until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id(""))));

使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。

  • 页面元素是否在页面上可用和可被单击:elementToBeClickable(By locator)
  • 页面元素处于被选中状态:elementToBeSelected(WebElement element)
  • 页面元素在页面中存在:presenceOfElementLocated(By locator)
  • 页面元素中是否包含特定的文本:textToBePresentInElement(By locator)
  • 页面元素值:textToBePresentInElementValue(By locator, java.lang.String text)
  • 标题 (title):titleContains(java.lang.String title)

Actions类

Actions类提供了鼠标和键盘点击的行为

import org.openqa.selenium.interactions.Actions


Actions action = new Actions(driver);

WebElemen element = driver.findElement(By.id(""));

鼠标点击

//单击

action.click(element).perform()

//右键

action.contextClick(element).perform()

//双击

action.doubleClick(element).perform()

//鼠标悬停,点击后不释放

action.clickAndHold(driver.findElement(By.id(""))).perform()

鼠标移动

//鼠标移动到元素上

action.moveToElement(element).perform();

元素移动

//将element1移动到element2位置上

action.dragAndDrop(element1, element2).perform();

//将element移动到(200,200)位置

action.dragAndDropBy(element, 200, 200).perform();

键盘输入

//输入abc然后按回车键

ac.sendKeys("abc").sendKeys(Keys.ENTER).perform();


//组合按键

ac.keyDown(Keys.SHIFT).sendKeys("a").keyUp(Keys.SHIFT).perform();

ac.sendKeys(Keys.chord(Keys.SHIFT, "a")).perform();

下拉框多选

Select se = new Select(driver.findElement(By.id("")));

ac.keyDown(Keys.SHIFT).click(se.getOptions().get(0)).click(se.getOptions().get(1)).keyUp(Keys.SHIFT).perform();

Robot类

Robot robot = new Robot();

robot.setAutoDelay(300);

robot.keyPress(KeyEvent.VK_A);

robot.keyRelease(KeyEvent.VK_A);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值