selenium的使用
本文摘自https://blog.csdn.net/qq_22003641/article/details/79137327(此處主要介紹模擬鼠標用法,更多常用法法請點擊查看)
1.selenium元素定位
Selenium提供了8種定位方式。
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
這8種定位方式在Java 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())
2.定位方法的用法
<html>
<head>
<body link="#0000cc">
<a id="result_logo" href="/" οnmοusedοwn="return c({'fm':'tab','tab':'logo'})">
<form id="form" class="fm" name="f" action="/s">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
</from>
</body>
</html>
我們的目的是要定位input標籤的輸入框。
- 通過id定位:
driver.findElement(By.id("kw"))
- 通過name定位:
driver.findElement(By.name("wd"))
- 通過class name定位:
driver.findElement(By.className("s_ipt"))
- 通過tag name定位:
driver.findElement(By.tagName("input"))
- 通過xpath定位,xpath定位有N種寫法,這裏列幾個常用寫法
driver.findElement(By.xpath("//*[@id='kw']"))
driver.findElement(By.xpath("//*[@name='wd']"))
driver.findElement(By.xpath("//input[@class='s_ipt']"))
driver.findElement(By.xpath("/html/body/form/span/input"))
driver.findElement(By.xpath("//span[@class='soutu-btn']/input"))
driver.findElement(By.xpath("//form[@id='form']/span/input"))
driver.findElement(By.xpath("//input[@id='kw' and @name='wd']"))
- 通過css定位,css定位有N種寫法,這裏列幾個常用寫法:
driver.findElement(By.cssSelector("#kw")
driver.findElement(By.cssSelector("[name=wd]")
driver.findElement(By.cssSelector(".s_ipt")
driver.findElement(By.cssSelector("html > body > form > span > input")
driver.findElement(By.cssSelector("span.soutu-btn> input#kw")
driver.findElement(By.cssSelector("form#form > span > input")
接下來,我們的頁面上有一組文本鏈接。
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新聞</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
- 通過link text定位:
driver.findElement(By.linkText("新聞")
driver.findElement(By.linkText("hao123")
- 通過partialLink text定位:
driver.findElement(By.partialLinkText("新") driver.findElement(By.partialLinkText("hao") driver.findElement(By.partialLinkText("123")
3.控制瀏覽器操作
(1)控制瀏覽器窗口大小
有時候我們希望能以某種瀏覽器尺寸找開,訪問的頁面在這種尺寸下運行。例如可以將瀏覽器設置成移動端大小(480* 800),然後訪問移動站點,對其樣式進行評估;WebDriver 提供了 manage().window().setSize()方法來設置瀏覽器的大小。
- maximize() 設置瀏覽器最大化
- setSize() 設置瀏覽器寬高
public class Browser {
public static void main(String[] args) throws InterruptedException {
WebDriver driver= new ChromeDriver();
driver.get("https://www.baidu.cn");
driver.manage().window().maximize();
Thread.sleep(2000);
driver.get("https://m.baidu.cn");
driver.manage().window().setSize(new Dimension(480, 800));
Thread.sleep(2000);
driver.quit();
}
}
在 PC 端執行自動化測試腳本大多的情況下是希望瀏覽器在全屏幕模式下執行, 那麼可以使用 maximize()方法使打開的瀏覽器全屏顯示, 其用法與 setSize()相同, 但它不需要任何參數。
(2)控制瀏覽器後退、前進
在使用瀏覽器瀏覽網頁時,瀏覽器提供了後退和前進按鈕,可以方便地在瀏覽過的網頁之間切換,WebDriver也提供了對應的back()和forward()方法來模擬後退和前進按鈕。下面通過例子來演示這兩個方法的使用。
- back() 模擬瀏覽器後退按鈕
- forward() 模擬瀏覽器前進按鈕
public class BrowserGo {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new ChromeDriver();
//get 到百度首頁
driver.get("https://www.baidu.com/");
System.out.printf("now accesss %s \n", driver.getCurrentUrl());
Thread.sleep(2000);
//點擊“新聞” 鏈接
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().forward();
System.out.printf("forward to %s \n", driver.getCurrentUrl());
Thread.sleep(2000);
driver.quit();
}
}
(3)刷新頁面
- refresh() 刷新頁面(F5)
driver.navigate().refresh();
webDriver常用的方法本文主要介紹模擬鼠標操作
通過前面例子瞭解到,可以使用click()來模擬鼠標的單擊操作,現在的Web產品中提供了更豐富的鼠標交互方式, 例如鼠標右擊、雙擊、懸停、甚至是鼠標拖動等功能。在WebDriver中,將這些關於鼠標操作的方法封裝在ActionChains類提供。
Actions 類提供了鼠標操作的常用方法:
- contextClick() 右擊
- clickAndHold() 鼠標點擊並控制
- doubleClick() 雙擊
- dragAndDrop() 拖動
- release() 釋放鼠標
- perform() 執行所有Actions中存儲的行爲
-
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; public class MouseDemo { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get("https://www.baidu.com/"); WebElement search_setting = driver.findElement(By.linkText("設置")); Actions action = new Actions(driver); action.clickAndHold(search_setting).perform(); driver.quit(); } }
導入提供鼠標操作的 ActionChains 類
- Actions(driver) 調用Actions()類,將瀏覽器驅動driver作爲參數傳入。
- clickAndHold() 方法用於模擬鼠標懸停操作, 在調用時需要指定元素定位。
- perform() 執行所有ActionChains中存儲的行爲, 可以理解成是對整個操作的提交動作。
關於鼠標操作的其它方法:
import org.openqa.selenium.interactions.Actions;
……
Actions action = new Actions(driver);
// 鼠標右鍵點擊指定的元素
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();