此时我们在浏览器进行选择点击元素后,可以使用一下代码进行模拟点击的操作:
driver.findElement(By.cssSelector("#su")).click();
这里使用click进行点击事件模拟;
代码如下:
driver.findElement(By.cssSelector("#kw")).sendKeys("雷霆万钧");
这里使用sendKeys进行输入事件模拟;
代码如下:
driver.findElement(By.cssSelector("#kw")).sendKeys("我爱游戏");
driver.findElement(By.cssSelector("#kw")).clear();
driver.findElement(By.cssSelector("#kw")).sendKeys("我爱学习");
这里使用clear进行清除输入框的事件模拟;
代码如下:
System.out.println(driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1)")).getText());
这里使用getText进行获取文本的操作;
当然如果这里的元素是一个属性那么就要使用:getAttribute("属性名称")进行获取属性的操作;
代码如下:
void getUrlAndTitle(){
createDriver();
System.out.println(driver.getCurrentUrl());
System.out.println(driver.getTitle());
driver.quit();
}
获取这里的URL是getCurrentUrl,然后获取标题为getTitle;
提示:在每个页面都有一个drive对应的句柄,如果跳转另一个页面后(打开了两个页面),那么就要操作句柄的转换;
//句柄的操作
void getHandle(){
//这里要点击进入另一个页面
createDriver();
driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a")).click();
//此时进入了另一个页面,更换driver句柄
//获取当前句柄
String concurrentDriver = driver.getWindowHandle();
//获取所有页面句柄
Set<String> allDrivers = driver.getWindowHandles();
for(String handle : allDrivers){
if(handle != concurrentDriver){
driver.switchTo().window(handle);
}
}
注意:我们要获取当前页面的drive句柄,然后再次获取全部页面的句柄;最后如果过当前页面不为之前获取的页面,那么就要使用if语句进行句柄的转换;
代码如下:
void changeWindow() throws InterruptedException {
createDriver();
driver.manage().window().minimize();
Thread.sleep(3000);
driver.manage().window().maximize();
Thread.sleep(3000);
//全屏窗⼝
driver.manage().window().fullscreen();
Thread.sleep(3000);
//⼿动设置窗⼝⼤⼩
driver.manage().window().setSize(new Dimension(1024,768));
driver.quit();
}
解释:第一个minize即最小化,然后就是最大化,全屏,最后规定尺寸大小;
3.3屏幕截图
我们这里首先要进行依赖的引入:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
代码如下:
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File(filename));
注意:copyFile中第一个file是我们截图的文件,然后后面就是我们保存文件的路径;
代码如下:
driver.close();
但是如果存在两个close,关闭两个页面,那么注意:将这里的driver转化,close会将对应的句柄进行释放,所以必须进行句柄修改;
代码如下:
Thread.sleep(1000);
这里的1000指的就是1000ms,那么所以就是直接强制等待1s;(等待的主要的作用就是在等待渲染,防止在查找元素时,元素本来存在,但是由于没有渲染出来,导致找不到元素)
隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执⾏,直到超时没找到元素才会报错。 implicitlyWait() 参数:Duration类中提供的毫秒、秒、分钟等⽅法
代码如下:
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
注意:隐式等待的作用域是全局中;
显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码
代码如下:
new WebDriverWait(driver, Duration.ofSeconds(3)).
until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#\\31 > div > div > div > div > div > div.header-wrapper_3m6nI > div.cos-row.row-text_1L24W.row_4WY55 > div > div > div.cos-flex.cos-items-center > div.title-wrapper_XLSiK > a > div > p > span > span")));
注意:
• elementToBeClickable(By locator) ‒ ⽤于检查元素的期望是可⻅的并已启⽤,以便您 可以单击它。 • textToBe(Bylocator,String str) - 检查元素。 • presenceOfElementLocated(Bylocator) ‒ 检查⻚⾯的 DOM 上是否存在元素。 • urlToBe(java.lang.String url) ‒ 检查当前⻚⾯的 URL 是⼀个特定的 URL;
当然这里还有其他的方法~~~
代码如下:
driver.navigate().to("https://selenium.dev");
driver.get("https://selenium.dev");
注意:这两种方法都是打开网站的操作,没有什么区别;
代码如下所示:
driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();
对应的就是上述的按键;
具体的代码如下所示:
Alert alert = driver.switchTo.alert();
//输入内容
alert.sendKeys("");
//确认
alert.accept();
//取消
alert.dismiss();
大致就是:点击进入弹框过后,出现了输入框,通过sendKey进行输入;
然后accept进行确认,然后dismiss进行取消;
点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的
文件上传代码如下所示:
WebElement ele = driver.findElement(By.cssSelector("body > div > div >
input[type=file]"));
2 ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");
一般来说,我们启动浏览器后,直接就是可见式的看见浏览器的启动,但是设置无头模式后,直接在后台运行,就不用盯着浏览器看了;
代码如下所示:
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
//设置无头模式
options.addArguments("-headless");
WebDriver driver = new ChromeDriver(options);
options.addArguments("--remote-allow-origins=*");设置网址访问权限; options.addArguments("-headless");设置无头模式;
代码如下所示:
void changePage(){
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
//options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
//options.setPageLoadStrategy(PageLoadStrategy.NONE);
//options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.baidu.com/");
driver.quit();
}
options.setPageLoadStrategy(PageLoadStrategy.NORMAL):即默认加载,即全部数据进行加载;
options.setPageLoadStrategy(PageLoadStrategy.NONE):DOM访问已准备就绪,但是图像资源可能还在加载;
options.setPageLoadStrategy(PageLoadStrategy.EAGER):完全不会阻塞webdriver;会导致什么资源都没加载出来;
本期小编主要讲解了关于自动化测试的函数,涉及到操作元素,窗口的操作,等待,浏览器导航,弹窗操作,文件上传以及浏览器参数设置;