Selenium 是目前用的最广泛的Web UI 自动化测试框架,核心功能就是可以在多个浏览器上进行自动化测试。
支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome,多语言C、 java、ruby、python...
Selenium IDE是firefox浏览器的一个插件。提供简单的脚本录制、编辑与回放功能。Selenium Grid是用来对测试脚步做分布式处理。现在已经集成到selenium server 中了。
依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.14.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
例子1:表单填充
// 如果不设置将搜索环境变量
System.setProperty("webdriver.chrome.driver", "C:\\MyDrivers\\selenium\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.baidu.com/");
// 最大化窗口
driver.manage().window().maximize();
// 定制大小窗口
//driver.manage().window().setSize(new Dimension(480, 800));
Thread.sleep(1000);
//提交表单(搜索字符)
WebElement searchBox = driver.findElement(By.id("kw"));
searchBox.sendKeys("ChromeDriver");
searchBox.submit();
Thread.sleep(3000);
//退出
driver.quit();
例子2:元素定位
//8种定位方式在Python selenium中所对应的方法为:
findElement(By.id())
findElement(By.name())
findElement(By.className())
findElement(By.tagName())
findElement(By.linkText())
findElement(By.partialLinkText())
findElement(By.xpath())
findElement(By.cssSelector())
例子3:点击链接、后退、刷新浏览器
// //点击链接
// driver.findElement(By.linkText("新闻")).click();
// System.out.printf("now accesss %s \n", driver.getCurrentUrl());
// Thread.sleep(2000);
// //执行浏览器后退
// driver.navigate().back();
// System.out.printf("back to %s \n", driver.getCurrentUrl());
// Thread.sleep(2000);
// //刷新页面
// driver.navigate().refresh();
例子4:鼠标、键盘事件
// 鼠标右键点击指定的元素
action.contextClick(driver.findElement(By.id("element"))).perform();
// 鼠标右键点击指定的元素
action.doubleClick(driver.findElement(By.id("element"))).perform();
// 鼠标拖拽动作, 将 source 元素拖放到 target 元素的位置。
WebElement source = driver.findElement(By.name("element"));
WebElement target = driver.findElement(By.name("element"));
action.dragAndDrop(source,target).perform();
// 释放鼠标
action.release().perform();
WebElement input = driver.findElement(By.id("kw"));
//输入框输入内容
input.sendKeys("seleniumm");
Thread.sleep(2000);
//删除多输入的一个 m
input.sendKeys(Keys.BACK_SPACE);
Thread.sleep(2000);
//输入空格键+“教程”
input.sendKeys(Keys.SPACE);
input.sendKeys("教程");
Thread.sleep(2000);
//ctrl+a 全选输入框内容
input.sendKeys(Keys.CONTROL,"a");
Thread.sleep(2000);
//ctrl+x 剪切输入框内容
input.sendKeys(Keys.CONTROL,"x");
Thread.sleep(2000);
//ctrl+v 粘贴内容到输入框
input.sendKeys(Keys.CONTROL,"v");
Thread.sleep(2000);
//通过回车键盘来代替点击操作
input.sendKeys(Keys.ENTER);
Thread.sleep(2000);
例子5:Xpath定位
WebElement search = driver.findElement(By.id("kw"));
search.sendKeys("Selenium");
search.sendKeys(Keys.ENTER);
Thread.sleep(2000);
System.out.println("Search after================");
//获取当前的 title 和 url
System.out.printf("title of current page is %s\n", driver.getTitle());
System.out.printf("url of current page is %s\n", driver.getCurrentUrl());
//获取第一条搜索结果的标题
WebElement result = driver.findElement(By.xpath("//div[@id='content_left']/div/h3/a"));
System.out.println(result.getText());
WebElement search_text =driver.findElement(By.id("kw"));
search_text.sendKeys("selenium");
search_text.submit();
Thread.sleep(2000);
例子6:定位元素组
//定位元素组
List<WebElement> search_result = driver.findElements(By.xpath("//div/div/h3"));
//打印元素的个数
System.out.println(search_result.size());
// 循环打印搜索结果的标题
for(WebElement result : search_result){
System.out.println(result.getText());
}
//打印第n结果的标题
WebElement text = search_result.get(search_result.size() - 10);
System.out.println(text.getText());
例子7:Javascript事件
// 将页面滚动条拖到底部
((JavascriptExecutor)driver).executeScript("window.scrollTo(100,450);");
Thread.sleep(3000);
例子8:下拉框交互、弹窗交互
driver.findElement(By.linkText("设置")).click();
driver.findElement(By.linkText("搜索设置")).click();
Thread.sleep(2000);
//<select>标签的下拉框选择
WebElement el = driver.findElement(By.xpath("//select"));
Select sel = new Select(el);
sel.selectByValue("20");//选第2个
Thread.sleep(2000);
//保存设置
driver.findElement(By.className("prefpanelgo")).click();
//接收弹窗
driver.switchTo().alert().accept();
Thread.sleep(2000);
例子9:文件上传
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(srcFile,new File("d:\\screenshot.png"));
} catch (IOException e) {
e.printStackTrace();
}
例10:自动登陆测试
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class LoginUsingSelenium {
@Test
public void login() {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "path of driver");
WebDriver driver=new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.linkedin.com/login");
WebElement username=driver.findElement(By.id("username"));
WebElement password=driver.findElement(By.id("password"));
WebElement login=driver.findElement(By.xpath("//button[text()='Sign in']"));
username.sendKeys("example@gmail.com");
password.sendKeys("password");
login.click();
String actualUrl="https://www.linkedin.com/feed/";
String expectedUrl= driver.getCurrentUrl();
Assert.assertEquals(expectedUrl,actualUrl);
}
}
最后有个不错的云测试平台,可以实时测试和自动化测试,可以测试2000+桌面或移动端浏览器。
https://www.lambdatest.com/selenium-automation
如果是这个云端的测试,代码改写如下
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class LoginUsingSelenium {
public RemoteWebDriver driver = null;
public String url = "https://www.lambdatest.com/";
public static final String username= "sadhvisingh24";
public static final String auth_key = "auth key generated";
public static final String URL = "@hub.lambdatest.com/wd/hub";
boolean status = false;
@Test
public void login () {
// TODO Auto-generated method stub
try {
driver.manage().window().maximize();
driver.get("https://www.linkedin.com/login");
WebElement username = driver.findElement(By.id("username"));
WebElement password = driver.findElement(By.id("password"));
WebElement login = driver.findElement(By.xpath("//button[text()='Sign in']"));
username.sendKeys("linkedin username");
password.sendKeys("fake password");
login.click();
String actualUrl = "https://www.linkedin.com/feed/";
String expectedUrl = driver.getCurrentUrl();
if (actualUrl.equalsIgnoreCase(expectedUrl)) {
System.out.println("Test passed");
status = true; //Lambda status will be reflected as passed
} else {
System.out.println("Test failed"); //Lambda status will be reflected as passed
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
finally {
tearDown();
}
}
@BeforeClass
public void setUp() {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("browserName", "chrome");
capabilities.setCapability("version", "72.0");
capabilities.setCapability("platform", "win8"); // If this cap isn't specified, it will just get the any available one
capabilities.setCapability("build", "TestNG_login_1");
capabilities.setCapability("name", "TestNG_login_1");
capabilities.setCapability("network", true); // To enable network logs
capabilities.setCapability("visual", true); // To enable step by step screenshot
capabilities.setCapability("video", true); // To enable video recording
capabilities.setCapability("console", true); // To capture console logs
try {
driver = new RemoteWebDriver(new URL("https://" + username + ":" + auth_key + URL), capabilities);
} catch (Exception e) {
System.out.println("Invalid grid URL" + e.getMessage());
}
}
private void tearDown () {
if (driver != null) {
((JavascriptExecutor) driver).executeScript("lambda-status=" + status); //Lambda status will be reflected as either passed/ failed
driver.quit();
System.out.println("The setup process is completed");
}
}
}
来源:https://www.cnblogs.com/starcrm/p/12658301.html