OK,那么上篇博客我們介紹了如何搭建基于Java+selenium的環(huán)境,并且使用selenium的一些語法給大家演示了如何進行自動化測試的案例,那么本篇博客我們來繼續(xù)學(xué)習(xí)selenium的一些其他的比較重要的語法,感謝關(guān)注,期待三連~
目錄
一、定位一組元素
二、下拉框處理
三、上傳文件
四、quit和close的區(qū)別
五、瀏覽器頁面跳轉(zhuǎn)
六、截圖操作
一、定位一組元素
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Checkbox</title>
</head>
<body>
<h3>checkbox</h3>
<div class="well">
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="c1">checkbox1</label>
<div class="controls">
<input type="checkbox" id="c1" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="c2">checkbox2</label>
<div class="controls">
<input type="checkbox" id="c2" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="c3">checkbox3</label>
<div class="controls">
<input type="checkbox" id="c3" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="r">radio</label>
<div class="controls">
<input type="radio" id="r1" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="r">radio</label>
<div class="controls">
<input type="radio" id="r2" />
</div>
</div>
</form>
</div>
</body>
</html>
2、保存之后,修改文件的名稱為“xx.html”,我這里取的是demo6.html;
3、雙擊打開,觀察界面展示;
?
那么這里我們想實現(xiàn)一次性勾選checkbox1,2,3這三個選項,即實現(xiàn)多選,那么怎么做呢?
也就是我們開頭提到的定位一組元素,看代碼實現(xiàn):
package AutoTest.Selenium1;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
//定位一組元素
public class demo6 {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.get("file:///C:/Users/ASUS/Desktop/demo6.html");
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{
//什么也不做
}
}
}
}
我們發(fā)現(xiàn)是使用了List<WebElement>來存儲所有帶input標(biāo)簽的元素;
這個時候我們查看網(wǎng)頁源代碼,我們發(fā)現(xiàn)每個可以勾選的按鈕都帶有type屬性;
?那么就可以使用方法getAttribute("type"),括號中放的是數(shù)據(jù)類型,來定位到所有類型帶type的元素;定位到之后進行click()點擊操作;
運行結(jié)果:
二、下拉框處理
那么我們在設(shè)計自動化用例的時候也經(jīng)常會遇到input帶下拉框的這種情況,比如下面:
源代碼:
<html>
<body>
<select id="ShippingMethod"
onchange="updateShipping(options[selectedIndex]);" name="ShippingMethod">
<option value="12.51">UPS Next Day Air ==> $12.51</option>
<option value="11.61">UPS Next Day Air Saver ==> $11.61</option>
<option value="10.69">UPS 3 Day Select ==> $10.69</option>
<option value="9.03">UPS 2nd Day Air ==> $9.03</option>
<option value="8.34">UPS Ground ==> $8.34</option>
<option value="9.25">USPS Priority Mail Insured ==> $9.25</option>
<option value="7.45">USPS Priority Mail ==> $7.45</option>
<option value="3.20" selected="">USPS First Class ==> $3.20</option>
</select>
</body>
</html>
那么這種情況的話直接使用普通的cssSelector或者xpath方法是無法完成頁面元素定位的,那么如何操作呢?這里主要會用到一個Select函數(shù),創(chuàng)建一個Select對象,然后調(diào)用里面對應(yīng)的方法;常見的使用下標(biāo)定位或者通過value來進行定位;
package AutoTest.Selenium1;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.Select;
//下拉框處理
public class demo7 {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.get("file:///C:/Users/ASUS/Desktop/demo7.html");
WebElement webElement = driver.findElement(By.cssSelector("#ShippingMethod"));
Select select = new Select(webElement);
select.selectByIndex(3);
select.selectByValue("9.03");
}
}
value值查看:
三、上傳文件
?先構(gòu)建一個頁面,代碼如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js">
</script>
<link
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra
p-combined.min.css" rel="stylesheet" />
<script type="text/javascript">
</script>
</head>
<body>
<div class="row-fluid">
<div class="span6 well">
<h3>upload_file</h3>
<input type="file" name="file" />
</div>
</div>
</body>
<script src="http://netdna.bootstrapcdn.com/twitterbootstrap/2.3.2/js/bootstrap.
min.js"></script>
</html>
效果:
自動化代碼:
package AutoTest.Selenium1;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
//上傳文件
public class demo8 {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.get("file:///C:/Users/ASUS/Desktop/demo8.html");
driver.findElement(By.cssSelector("input")).sendKeys("C:\\Users\\ASUS\\Desktop\\UPUP.txt");
}
}
?定位到上傳文件的按鈕,然后輸入自己要上傳文件的路徑即可,這里使用絕對路徑和相對路徑均可;運行結(jié)果:
四、quit和close的區(qū)別
quit是關(guān)閉整個瀏覽器,close只是關(guān)閉當(dāng)前窗口,即quit會清空緩存,而close不會清空緩存。
代碼驗證:
package AutoTest.Selenium1;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import static java.lang.Thread.sleep;
//quit和close的區(qū)別
public class demo9 {
public static void main(String[] args) throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.get("https://www.baidu.com");
// driver.findElement(By.cssSelector("#kw")).sendKeys("楊冪");
driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);
//quit是關(guān)閉整個瀏覽器
// driver.quit();
//close只是關(guān)閉當(dāng)前窗口
driver.close();
//即quit會清空緩存,而close不會清空緩存。
}
}
?使用close()函數(shù)時,現(xiàn)在是打開了兩個窗口句柄;
隨著代碼的運行,關(guān)閉了一個窗口句柄;
如果使用quit的話是運行結(jié)束之后直接退出瀏覽器;
五、瀏覽器頁面跳轉(zhuǎn)
那么我們在設(shè)計自動化代碼的時候,可能會遇到頁面從當(dāng)前頁面跳轉(zhuǎn)到另一個新的頁面,那么這個時候再去使用cssSelector或者Xpath方法去定位元素的話,肯定是定位不到的,因為跳轉(zhuǎn)到了新的頁面,get方法打開的是舊的頁面,那么如何解決呢?
比如在百度首頁,我們點擊新聞這個超鏈接,那么瀏覽器會打開兩個頁面;
點擊“新聞”按鈕,來到了一個新的頁面;
?
那么我們發(fā)現(xiàn)這個頁面也是可以進行搜索框輸入數(shù)據(jù)進行百度一下的;
看代碼注釋:
package AutoTest.Selenium1;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.Set;
import static java.lang.Thread.sleep;
public class demo10 {
public static void main(String[] args) throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);
//通過getWindowHandles獲取所有的窗口句柄
//通過getWindowHandle獲取get打開的頁面窗口句柄
Set<String> handles = driver.getWindowHandles();
//target用來獲取當(dāng)前最新的頁面地址
String target = "";
for (String handle:handles) {
target = handle;
}
driver.switchTo().window(target);
driver.findElement(By.cssSelector("#ww")).sendKeys("新聞聯(lián)播");
driver.findElement(By.cssSelector("#s_btn_wr")).click();
}
}
運行結(jié)果:
六、截圖操作
這個操作的話就是會在指定的頁面進行截圖,然后保存到對應(yīng)的路徑,在實際工作中對比與我們的預(yù)期結(jié)果是否一致;
1、首先需要在我們的配置文件pom.xml中導(dǎo)入依賴;
?依賴代碼:
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
自動化代碼:
package AutoTest.Selenium1;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.File;
import java.io.IOException;
import static java.lang.Thread.sleep;
/**
* 截圖操作:需要導(dǎo)入依賴,可以去pom.xml文件中查看依賴,依賴從maven中央倉庫中搜索common-io,下載。
*/
public class dmeo11 {
public static void main(String[] args) throws IOException, InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("自動化測試");
driver.findElement(By.cssSelector("#su")).click();
sleep(3000);
File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File("D://demo10.png"));
}
}
運行可以去我們自己設(shè)定的目錄路徑下面查看是否生成了對應(yīng)的截圖:
文章來源:http://www.zghlxwxcb.cn/news/detail-688032.html
OK,以上就是selenium的所有常見操作的方法了,創(chuàng)作不易,可以動動小手一鍵三連啦,我們下篇博客更新自動化測試框架Junit的用法~文章來源地址http://www.zghlxwxcb.cn/news/detail-688032.html
到了這里,關(guān)于自動化測試工具Selenium的語法續(xù).的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!