java selenium經常使用API彙總

(WebElement、iFrame、select、alert、瀏覽器窗口、事件、js)

 

 

 WebElement相關方法

1.點擊操做html

WebElement button =  driver.findElement(By.id("login"));
button.click();

由元素對象調用click()方法;java

 

2.清除操做web

WebElement username = driver.findElement(By.id("username_input"));
username.clear();

調用以後,會把輸入框的內容所有清空;瀏覽器

 

3.得到元素屬性的值app

<input type="text" value="" autocomplete="off" placeholder="用戶名" id="u" class="form-control" onblur="checkFailNum()" name="username">

上面代碼是用戶名輸入框的源碼,咱們要獲取這個"用戶名"三個字就須要用到;post

getAttribute(java.lang.String name) 這方法,代碼以下:測試

WebElement username = driver.findElement(By.id("u"));
username.getAttribute("placeholder");

 

4.獲取元素的文本ui

<input type="text" value="" autocomplete="off" placeholder="用戶名" id="u" class="form-control" onblur="checkFailNum()" name="username">
WebElement login = driver.findElement(By.id("loginBtn"));
login.getText();

 

5.元素是否顯示this

方法有個返回值類型是boolean,也就是說若是元素顯示了返回true,若是沒有顯示返回false;spa

WebElement login = driver.findElement(By.id("loginBtn"));
login.isDisplayed();

 

6.元素是否被選擇

WebElement checkbox = driver.findElement(By.id("checkbox_id"));
checkbox.isSelected();
checkbox.isSelected();//會有返回值,若是勾選了。返回true,若是沒有勾選返回false。

 

7.元素是否被啓用

WebElement login = driver.findElement(By.id("loginBtn"));
login.isEnabled();
//若是可用返回true,若是不可用返回false

 

8.提交操做

<button class="btn btn-major" id="loginBtn" type="submit">登陸</button>
WebElement login = driver.findElement(By.id("loginBtn"));
login.submit();

 

iFrame處理

有時候咱們在定位一個頁面元素的時候發現一直定位不了,反覆檢查本身寫的定位器沒有任何問題,代碼也沒有任何問題。這時你就要看一下這個頁面元素是否在一個iframe中,這可能就是找不到的緣由之一。若是你在一個default content中查找一個在iframe中的元素,那確定是找不到的。反之你在一個iframe中查找另外一個iframe元素或default content中的元素,那必然也定位不到。selenium webdriver中提供了進入一個iframe的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

也提供了一個返回default content的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
driver.switchTo().frame("id");//傳入的是iframe的id

返回上一個iFrame:

driver.switchTo().defualContent();

 

select 操做下拉選擇框

html代碼:

複製代碼
複製代碼
<select style="width:75px" onchange="change_prodj()" name="province" id="province">
<option value="10">A 安徽</option>
<option value="11">A 澳門</option>
<option value="12">B 北京</option>
<option value="43">C 重慶</option>
<option value="13">F 福建</option>
<option value="14">G 甘肅</option>
<option value="15">G 廣東</option>
<option value="16">G 廣西</option>
<option value="17">G 貴州</option>
<option value="18">H 海南</option>
<option value="19">H 河北</option>
<option value="20">H 河南</option>
<option value="21">H 黑龍江</option>
</select>
複製代碼

首先定位到select下拉框

WebElement element_province = driver.findElement(By.id(「province」));

而後將定位到的element傳入select

Select province = new Select(element_province);

而後由select來操做下拉框

province.selectByIndex(0) //根據所選值的位置來選擇下拉框值,從0開始
province.selectByValue(「18」) //根據value值來選擇下拉框的值,好比這裏的18,選擇的就是海南
province .selectByVisibleText(「北京」)//這個是根據可見文原本操做下拉菜單,好比你選的北京,那麼就會找到北京做爲下拉框的

 

處理alert 彈窗

獲取當前頁面彈出的alert

Alert  a= driver.switchTo().alert();
alert.accept();

獲取到alert以後,咱們能夠經過alert提供的方法來獲取alert上的文本,模擬點擊alert上的肯定按鈕,模擬點擊alert上的取消按鈕等

 

處理瀏覽器彈出的新窗口

咱們在一個頁面上,點擊一個連接以後不會在當前頁面上打開此連接而是新開一個窗口打開此頁面。那麼咱們如何跳轉到新開的頁面去操做新開的頁面呢?selenium也提供了對應的API來處理。首先咱們須要瞭解下,每一個窗口都是有個句柄的,能夠理解爲瀏覽器窗口的標識符。咱們能夠根據這些標識符來肯定新開的窗口,具體思路以下:

首先得到當前句柄:

String current_handles = driver. getWindowHandle();

出現新窗口以後,獲取全部窗口句柄

Set<String> all_handles = driver.getWindowHandles();

循環判斷,把當前句柄從全部句柄中移除,剩下的就是你想要的新窗口

Iterator<String> it = all_handles.iterator();
while(it.hasNext()){
if(current_handles == it.next()) continue;
//跳入新窗口
WebDriver window = dr.switchTo().window(it.next());
}

最後就能夠在新窗口的頁面進行相關操做了,在新窗口操做的時候使用新driver進行頁面操做,新driver是window

若是想回到最開始的窗口請使用:

driver.switchTo().window(current_handles);

 

執行JS腳本

有時候咱們須要JS腳原本輔助咱們進行測試,好比咱們用JS賦值或者用js執行點擊操做等。

方法一:

聲明js腳本

String js =「alert(\"hello,this is a alert!\")」;

執行js腳本

((JavascriptExecutor) driver).executeScript(js);

執行以後會在瀏覽器上彈出一個alert,顯示內容是「hello,this is a alert!」

核心代碼以下:

WebDriver driver = new FirefoxDriver();
String js ="alert(\"hello,this is a alert!\")";
((JavascriptExecutor) driver).executeScript(js);
Thread.sleep(2000);
driver.quit();

方法二:

這個方法比較適用某些元素不易點擊的狀況下使用,好比網頁內容太長,當前窗口太長,想要點擊那些不在當前窗口能夠看到元素能夠用此方法。
((JavascriptExecutor) driver).executeScript(String js, Object args);
此方法有兩個參數,第一個是js腳本,至於js腳本你像寫點擊的或者輸入的腳本均可以,咱們這裏舉例爲點擊操做。第二個參數是:要點擊的元素。
好比我要點擊百度搜索的搜索按鈕,能夠這樣寫:
((JavascriptExecutor) driver).executeScript(「arguments[0].click();」, driver.findElement(By.id(「su」)));
核心代碼以下:

複製代碼
複製代碼
WebDriver driver = new FirefoxDriver();
driver.get("https://www.baidu.com/");
String js ="arguments[0].click();";
driver.findElement(By.id("kw")).sendKeys("JAVA");
WebElement searchButton = driver.findElement(By.id("su"));
((JavascriptExecutor) driver).executeScript(js,searchButton);
Thread.sleep(2000);
driver.quit();
複製代碼
複製代碼

 

等待元素加載

1.硬性等待(不推薦)

Thread.sleep(int sleeptime);

2.智能等待

複製代碼
複製代碼
public void waitForElementToLoad(int timeOut, final By By) {        
    try {
        (new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {
                WebElement element = driver.findElement(By);
                return element.isDisplayed();
                }
            });
        } catch (TimeoutException e) {
            Assert.fail("超時!! " + timeOut + " 秒以後還沒找到元素 [" + By + "]",e);
       }
}
複製代碼
複製代碼

3.設置等待頁面加載完畢

int pageLoadTime = 10;
driver.manage().timeouts().pageLoadTimeout(pageLoadTime, TimeUnit.SECONDS);

 

鼠標事件

action類去操做鼠標

複製代碼

Actions 類提供了鼠標操做的經常使用方法:

· contextClick()    右擊
· clickAndHold()   鼠標點擊並控制
· doubleClick()    雙擊
· dragAndDrop()   拖動
· release()        釋放鼠標

· perform()  執行全部Actions中存儲的行爲

 

鼠標右擊操做。

導入提供鼠標操做的ActionChains 類
Actions(driver)
調用Actions()類,將瀏覽器驅動driver做爲參數傳入。
contexClick(xxx)
contextClick()方法用於模擬鼠標右鍵操做,在調用時須要指定元素定位。
perform() 執行全部ActionChains中存儲的行爲,能夠理解成是對整個操做的提交動做。

action.contextClick(driver.findElement(By.className("cnisdisd"))).perform();

 

鼠標懸停。clickAndHold();

action1.clickAndHold(driver.findElement(By.linkText("設置"))).perform();

 

鼠標雙擊操做。
doubleClick()方法用於模擬鼠標雙擊操做。

action1.doubleClick(driver.findElement(By.className(""))).perform();

 

鼠標拖放操做。
drag_and_drop(source, target)在源元素上按下鼠標左鍵,而後移動到目標元素上釋放。
·source:鼠標拖動的源元素。
·target:鼠標釋放的目標元素。

WebElement source=driver.findElement(By.className("element"));
      WebElement target=driver.findElement(By.className("element"));
      action1.dragAndDrop(source, target).perform();

 

釋放鼠標
release()方法用於釋放鼠標事件。

action1.release().perform();
複製代碼

 鍵盤事件

複製代碼
使用鍵盤按鍵方法前須要先導入keys類。
如下爲經常使用的鍵盤操做:
sendKeys(Keys.BACK_SPACE)     刪除鍵(BackSpace)
sendKeys(Keys.SPACE)              空格鍵(Space)
sendKeys(Keys.TAB)                  製表鍵(Tab)
sendKeys(Keys.ESCAPE)            回退鍵(Esc)
sendKeys(Keys.ENTER)              回車鍵(Enter)
sendKeys(Keys.CONTROL,'a')   全選(Ctrl+A)
sendKeys(Keys.CONTROL,'c')   複製(Ctrl+C)
sendKeys(Keys.CONTROL,'x')   剪切(Ctrl+X)
sendKeys(Keys.CONTROL,'v')    粘貼(Ctrl+V)
sendKeys(Keys.F1)                    鍵盤F1
……
sendKeys(Keys.F12)                 鍵盤F12

eg:
package com.cy.selenium; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class Test02 { public static void main(String[] args) { WebDriver driver=new FirefoxDriver(); driver.manage().window().maximize(); driver.get("http://www.baidu.com/"); WebElement input =driver.findElement(By.id("kw")); // 輸入內容 input.sendKeys("seleniumm"); // 刪除多餘的m input.sendKeys(Keys.BACK_SPACE); // 輸入空格+教程 input.sendKeys(Keys.SPACE); input.sendKeys("教程"); // ctrl+a input.sendKeys(Keys.CONTROL,"a"); // ctrl+x input.sendKeys(Keys.CONTROL,"x"); // ctrl+v input.sendKeys(Keys.CONTROL,"v"); // 經過回車鍵 查詢 input.sendKeys(Keys.ENTER); driver.close(); } }
複製代碼

 

設置瀏覽器窗口大小

窗口最大化

driver.manage().window().maximize();

指定設置窗口大小

Dimension d = new Dimension
driver.manage().window().setSize(d);

指定窗口在屏幕中出現位置

Point p = new Point(500, 300);
driver.manage().window().setPosition(p);
相關文章
相關標籤/搜索