1. Selenium的安裝
2. 了解自動化和selenium
2.1 什么是自動化以及為什么要做
自動化測試能夠代替一部分的手工測試。自動化測試能夠提高測試效率。
隨著功能的增加,版本越來越多,版本回歸的壓力也越來越大,所以僅僅通過人工測試來回歸所有的版本肯定是不現(xiàn)實(shí)的,所以我們需要借助自動化來進(jìn)行回歸
2.2為什么選擇selenium作為我們的文本自動化工具
選擇它肯定是有原因的.
- 1開源免費(fèi)
-
- 支持多瀏覽器。如Chrome、Firefox、IE、edge、Safari…
- 3)支持多系統(tǒng)。如Linux、Windows、MacOS
- 4)支持多語言。如java、python…
-
- selenium包底層有很多可使用的API
2.3 環(huán)境部署
- selenium工具包
- Chrome瀏覽器
- Chromedriver谷歌驅(qū)動
- java版本最低要求8
2.4什么驅(qū)動,驅(qū)動的工作原理。
汽車有驅(qū)動,兩輪驅(qū)動、四輪驅(qū)動 可以讓汽車跑起來計(jì)算機(jī)里也有驅(qū)動程序,可以驅(qū)動計(jì)算機(jī)和設(shè)備工作起來打開瀏覽器也需要驅(qū)動。
人工測試情況下(人工手動的驅(qū)動打開瀏覽器)自動化來說 ,代碼不能夠直接打開瀏覽器,需要借助驅(qū)動程序來協(xié)助打開瀏覽器。
代碼可以驅(qū)使驅(qū)動來打開瀏覽器。
selenium 驅(qū)動 瀏覽器三者之間的關(guān)系,如下圖:
如下圖,瀏覽器驅(qū)動本質(zhì)上是一個(gè)服務(wù)器
2.5一個(gè)簡單的自動化演示
需求:打開百度搜索"scdn"提交
//
public void dilireba() throws InterruptedException {
Thread.sleep(3000);
driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("csdn");
Thread.sleep(3000);
driver.findElement(By.cssSelector("#su")).submit();
//driver.findElement(By.cssSelector("#su")).click();
}
3. 掌握selenium的基礎(chǔ)語法
3.1)元素的定位
// 需求: 測試定位元素的 方式
public void findElement()
{
// 方式一:
// 定位元素并打印文本信息
String xpath = driver.findElement(By.xpath("http://*[@id=\"hotsearch-content-wrapper\"]/li[1]/a/span[2]")).getText();
System.out.println(xpath);
// 方式二:
String css = driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).getText();
System.out.println(css);
}
3.2) 元素的操作
// 元素的操作
// 點(diǎn)擊:click
// 提交:submit
// 模擬按鍵輸入:send_keys
// 清楚對象輸入的文本內(nèi)容 : clear()
// 獲取文本: gettext
// 獲取元素屬性: getAttribute()
public void sendkeys_test() throws InterruptedException {
driver.findElement(By.cssSelector("#kw")).sendKeys("" +
"今天天氣好啊");
driver.findElement(By.cssSelector("#kw")).click();
Thread.sleep(3000);
driver.findElement(By.cssSelector("#kw")).clear();
Thread.sleep(3000);
driver.findElement(By.cssSelector("#kw")).sendKeys("" +
"明天天氣也會好的");
Thread.sleep(2000);
}
3.3)等待
// 需求: 代碼的執(zhí)行速度比較快,而前端頁面渲染的速度相比慢一點(diǎn),可能導(dǎo)致的結(jié)果是: 代碼已經(jīng)提交執(zhí)行到下一步了,頁面還沒渲染出來,元素找不到.
// 等待元素被渲染的三種方式:
// 1. 強(qiáng)制等待
// 讓程序多等一會, 優(yōu)點(diǎn):語法簡單 缺點(diǎn):固定時(shí)間,測試時(shí)間較長.
// 2. 隱式等待
// 在規(guī)定的時(shí)間內(nèi),輪詢等待元素出現(xiàn)之后就立即執(zhí)行下一步,如果在規(guī)定時(shí)間內(nèi)未能完成等待,則會拋出一個(gè) NoSuchElemenExcetion 異常.
// 優(yōu)點(diǎn): 節(jié)省了大量測試時(shí)間,執(zhí)行效率高. 缺點(diǎn): 需要等待所有的元素都展開才會執(zhí)行下一步,仍然會有時(shí)間消耗.
// 3. 顯示等待
// 強(qiáng)制等待可以針對某一個(gè)元素來進(jìn)行測試.
// 優(yōu)點(diǎn): 針對一個(gè)元素來進(jìn)行等待,極大降低自動化測試時(shí)間.
// 缺點(diǎn): 寫法較為復(fù)雜.
public void wait_test() throws InterruptedException {
// 1. 強(qiáng)制等待
Thread.sleep(3000);
// 2. 隱式等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 3. 顯示等待
WebDriverWait foo = new WebDriverWait(driver,Duration.ofSeconds(3));
foo.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#su")));
}
3.4) 信息的打印
public void getContent_test()
{
String title = driver.getTitle();
System.out.println(title);
String url = driver.getCurrentUrl();
System.out.println(url);
}
3.5) 窗口切換
public void windows_test() throws InterruptedException {
System.out.println("----第一個(gè)窗口------");
String curWinHandle = driver.getWindowHandle();
System.out.println(curWinHandle);
String title = driver.getTitle();
System.out.println(title);
String url = driver.getCurrentUrl();
System.out.println(url);
System.out.println("----第二個(gè)窗口------");
// 1.跳轉(zhuǎn)到一個(gè)頁面
driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).click();
Thread.sleep(3000);
// 2.driver不會自動切換,需要我們切換窗口
// 句柄是一個(gè)String類型, 獲取句柄
Set<String> windows = driver.getWindowHandles();
String window = "";
for(String win : windows)
{
System.out.println(win);
if(win != curWinHandle)
{
window=win;
}
}
driver.switchTo().window(window);
curWinHandle = driver.getWindowHandle();
System.out.println(curWinHandle);
title = driver.getTitle();
System.out.println(title);
url = driver.getCurrentUrl();
System.out.println(url);
}
3.6) 窗口大小的設(shè)置
public void windowSize_test()
{
driver.manage().window().maximize();
driver.manage().window().minimize();
driver.manage().window().setSize(new Dimension(800,100));
}
3.7) 執(zhí)行JavaScript代碼
public void executeScript_test()
{
driver.executeScript("alert(\"hellow world\")");
}
3.8 導(dǎo)航欄
selenium里提供了navigate接口來實(shí)現(xiàn)頁面的導(dǎo)航
public void navigate_test() throws InterruptedException {
WebElement webEle = driver.findElement(By.cssSelector("#nav > div > div > ul > li:nth-child(1) > a"));
webEle.click();
Thread.sleep(3000);
// 后退
driver.navigate().back();
Thread.sleep(3000);
// 前進(jìn)
driver.navigate().forward();
Thread.sleep(3000);
}
注意: driver 的窗口并沒有切換.
3.9 彈窗
// 用于不能定位到元素時(shí)使用
public void alert_test()
{
Alert alert = driver.switchTo().alert(); // 切換到提示彈窗
alert.sendKeys("are you ok");// 輸入
alert.accept(); // 接收
alert.dismiss();// 取消
}
3.10 鼠標(biāo) 鍵盤 操作
唯一區(qū)別就是,能夠看到鼠標(biāo)在移動,有時(shí)候沒反應(yīng)的,需要perform()執(zhí)行一下才有效果.文章來源:http://www.zghlxwxcb.cn/news/detail-503475.html
public void mouseKeysboard_test() throws InterruptedException {
WebElement ele = driver.findElement(By.cssSelector("#xxx"));
Actions actions = new Actions(driver);
actions.clickAndHold(ele).perform();
Thread.sleep(3000);
ele.sendKeys("hhhhhh");
}
3.11 選擇框
文章來源地址http://www.zghlxwxcb.cn/news/detail-503475.html
public void select_test() throws InterruptedException {
WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
Select select = new Select(ele);
select.selectByIndex(1); // 通過下標(biāo)選擇
Thread.sleep(3000);
select.selectByValue("10.69"); // 通過元素屬性 value來選擇
Thread.sleep(3000);
select.selectByVisibleText("UPS 2nd Day Air ==> $9.03");
Thread.sleep(3000);
}
3.12 上傳文件
public void fileUpload_test() throws InterruptedException {
WebElement ele = driver.findElement(By.cssSelector("#選擇上傳文件"));
ele.sendKeys("本地文件地址");
Thread.sleep(3000);
}
到了這里,關(guān)于Selenium java自動化的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!