马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、安装Selenium并在IDE中集成
此处利用edge欣赏器,在微软市肆Selenium,然后下载欣赏器对应版本的webDriver驱动包
在idea中创建maven项目,pom文件引入selenium依靠
在创建的测试类中,界说一个打开欣赏器的方法
System.setProperty是获取对应欣赏器的驱动步调
创建对应的驱动对象,通过get方法输入域名,就会自动打开欣赏器访问它。
二、Selenium根本利用
Selenium作为自动化测试框架,可以自动获取web页面的元素位置,然后模仿人举行点击利用。
这里有一些方法可以定位元素:
2.1 findElement:定位根本元素
只管不利用tagName属性获取,用className,name获取的话,由于大概一个页面有同名存在,大概不会获取到准确的元素,发起利用id
也可以通过css选择器来获取元素:
根据id的话,必要额外添加 " # ",根据类名获取,额外添加 " . " - edgeDriver.findElement(By.cssSelector("input[maxlength='255']")).sendKeys("csdn");
复制代码 2.1.1 定位一组元素 findElements
定位一组对象一样平常用于以了局景:
1、批量利用对象,好比将页面上全部的 checkbox 都勾选上;
2、先获取一组对象,再在这组对象中过滤出必要具体定位的一些对象。好比定位出页面上全部的
checkbox ,然后选择末了一个; - List<WebElement> webElements = driver.findElements(By.cssSelector("input"));
- for (int i = 0; i < webElements.size(); i++) {
- if(webElements.get(i).getAttribute("type").equals("checkbox")){
- webElements.get(i).click();
- }else{
- //什么也不做
- }
- }
复制代码
2.2 sendKeys:在获取的输入框中输入要输入的内容
- edgeDriver.findElement(By.className("s_ipt")).sendKeys("阿里云");
复制代码 2.3 click:模仿鼠标左键,好比搜索
- edgeDriver.findElement(By.id("su")).click();
复制代码 2.4 xpath:形貌页面中元素位置的路径
xpath是xml文档格式,有绝对路径和相对路径之分,绝对路径就是从根标签<html>开始,好比 /html/body/... ,但是如许的话,一旦位置变革,xpath也要修改
相对路径:
//input[@maxlength='100'] 如许是获取一个输入框,且属性中含有maxlength为100的元素
//a[text()='消息']
//a[contains(text(),'消息')]
2.5 clear:扫除输入内容
- edgeDriver.findElement(By.id("kw")).sendKeys("fankai");
- Thread.sleep(3000);
- edgeDriver.findElement(By.id("kw")).clear();
复制代码 2.6 WebElement:元素对象
获取的元素对象可以用WebElement吸取,然后利用内里的getXxx方法获取信息。
2.7 driver对象常用API
driver对象就是一开始获取的对应欣赏器的驱动对象
- System.out.println("当前页面的URL:" + edgeDriver.getCurrentUrl()); //输出当前的url链接
- System.out.println("当前页面的标题:" + edgeDriver.getTitle()); //输出当前的标题
- System.out.println("当前页面的源代码:" + edgeDriver.getPageSource()); //输出当前页面源代码
复制代码
close方法会关闭当前欣赏器窗口,而quit方法不一样,会关闭全部窗口,和驱动
manage方法可以得到Options对象,通过Options对象的window方法获取欣赏器窗口
window窗口对象可以获取对应的x,y轴巨细,以及全屏,最大化体现窗口等等利用- //获取窗口对象
- WebDriver.Window window = edgeDriver.manage().window();
- window.fullscreen();
- window.maximize();
- window.getPosition()
复制代码 2.7 导航栏对象 navigate
通过driver的navigate方法可以得到导航栏对象,导航栏可以通过to方法去往指定的url所在,也可以举行back方法返回上一页,forward方法去往下一页,refresh方法革新网页
2.8 期待利用
期待是为了防止,代码实行速率太快,页面UI还没有加载出来,就由于获取不到指定元素而报错。
硬期待:指的是线程的sleep方法,欺凌步调就寝指定时间,轻易浪费时间
隐期待:在设置的超时范围时间内不停获取元素,直至找到或超时,相对硬期待更机动,但是针对全局
参数time:超时的时间值
参数unit:超时的时间单元,用罗列范例TimeUnit体现
显式期待:期待某个条件发生后在实行代码
- //传入driver和过期时间
- WebDriverWait wait = new WebDriverWait(edgeDriver,5);
- wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw")));
复制代码 2.9 弹框alert和comfirm
由于弹框不属于当前页面的元素,以是无法通过定位方式获取
只能通过findElement获取到绑定对应js的按钮
1.然后通过driver的switchTo方法下的alert方法,得到alert对象。
如许利用alert对象的accept方法或dismiss来关闭弹框,还可以利用getText方法获取弹框里的信息。
2.confirm也是通过alert方法获取的alert对象来利用确认框的,但是accept是确定,dismiss是取消,getText仍旧是获取文本。
2.10 iframe切换 和 window切换
留意该切换是在差别的iframe标签中举行切换,不能切错了
-------------------------
当要利用另一个窗口的元素时,必须先切换窗口对应的句柄,再切换到对应的窗口
方法如下:打开b窗口,先获取全部句柄聚集,然后循环,传入句柄,根据页面标题来判断切换的窗口是想要的窗口吗?是就退出循环
切换方式:
driver.switchTo.window(nameOrHandle)
nameOrHandle指的是传入对应窗口的名称或句柄
得到句柄的方法上文提到了
2.11 select下拉框
假如元素应该是下拉框,我们就可以获取他并封装成应该select对象,从而调用底下的api
Select select = new Select(元素名称);
2.12 时间,日期控件
假如是readonly限定输入,可以界说应该js脚本,删除对应的readonly属性- JavascriptExecutor javascriptExecutor = (JavascriptExecutor) edgeDriver;
复制代码- javascriptExecutor.executeScript("document.getElementById("train_date").removeAttribute("readonly")");
复制代码 这里的train_date只是一个id,背面跟上转义字符 " \ "
然后就可以通过得到元素的格式来sendKey了
2.13 鼠标变乱
要利用鼠标变乱必要导入工具包: import org.openqa.selenium.interactions.Actions
方法move_to_element(element);
移动鼠标到一个元素中,menu 上面已经界说了他所指向的哪一个元素;
方法perform() 实行全部存储的举动;
contextClick() 右击;
doubleClick() 双击;
dragAndDrop() 拖动;
moveToElement() 移动;
2.14 文件上传
文件上传为input元素:
验证码:
2.15 键盘变乱
这个利用是让自动化代码在运行过程中可以举行点击键盘上的按键利用;下面给的功能即ctrl+a,
ctrl+c,ctrl+v这种快捷键的功能;- package AutoTest.Selenium1;
-
- import org.openqa.selenium.By;
- import org.openqa.selenium.Keys;
- import org.openqa.selenium.chrome.ChromeDriver;
- import org.openqa.selenium.chrome.ChromeOptions;
-
- //键盘事件 让自动化代码在运行过程中可以进行点击键盘上的按键操作
- public class demo4 {
- public static void main(String[] args) {
- ChromeOptions options = new ChromeOptions();
- options.addArguments("--remote-allow-origins=*");
- ChromeDriver driver = new ChromeDriver(options);
- driver.get("https://www.baidu.com/");
-
- driver.manage().window().maximize();
- // driver.manage().window().fullscreen();
- driver.findElement(By.cssSelector("#kw")).sendKeys("杨幂");
- driver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"a");
- driver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"c");
- driver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"v");
- driver.findElement(By.cssSelector("#su")).click();
- }
- }
复制代码 2.16 截图利用
这个利用的话就是会在指定的页面举行截图,然后生存到对应的路径,在实际工作中对比与我们的预期效果是否划一;
起主要导入common-io依靠到pom文件- File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
- FileUtils.copyFile(file,new File("D://demo10.png"));
复制代码 |