1. 程式人生 > >Java+Selenium3方法篇14-元素操作之輸入和點選

Java+Selenium3方法篇14-元素操作之輸入和點選

       前面文章介紹完了driver的一些常見的瀏覽器設定和查詢元素的介面,接下來,我們找到了元素,是為了去操作元素。這篇介紹元素操作常見方法中的,給元素寫入一個字串,和點選元素。一般來講,給元素輸入一個字串,這樣的元素,一般是可以輸入文字,基本上是inputbox這樣的前端元素,還有些是textarea這樣的元素。而點選元素,這個範圍就大了,第一個肯定是點選按鈕,除了按鈕,單選,多選按鈕,有些label標籤和超連結也是用點選方法。給元素上傳入一個字串並顯示在該元素上,我們用sendKeys()方法,點選元素,我們用click()方法。

我想先來看看sendKeys()和click()的原始碼。

public void click() {
    execute(DriverCommand.CLICK_ELEMENT, ImmutableMap.of("id", id));
  }

public void sendKeys(CharSequence... keysToSend) {
    File localFile = fileDetector.getLocalFile(keysToSend);
    if (localFile != null) {
      String remotePath = upload(localFile);
      keysToSend = new CharSequence[]{remotePath};
    }

    execute(DriverCommand.SEND_KEYS_TO_ELEMENT, ImmutableMap.of("id", id, "value", keysToSend));
  }
       上面第一個是我們需要呼叫的click()方法。click方法裡面呼叫了DriverConmand類中的一個方法,叫CLICK_ELEMENT,也就是點選元素,這個方法底層應該是用javascript實現的。因為瀏覽器大部分都支援Javascript這個指令碼語言。第二個方法是sendKes(),這個方法大致實現步驟是這樣的:把你想要輸入的字串,放到本地一個檔案,這樣java就能識別這個檔案,然後呼叫upload()方法,把這個包含字串檔案進行zip壓縮,上傳到一個瀏覽器端,然後瀏覽器端得到zip檔案,進行加壓縮,把檔案裡面的字串提取出來,變成一個CharSequence物件,也就是一個新的有序的字串物件,最後執行DriverCommad裡面關於傳字元到元素的方法。整個sendKeys()實現流程就是這樣,瞭解一下就可以。

運用舉例,用sendKeys()方法給百度搜索輸入框輸入一個關鍵詞,用click()方法點選搜尋提交按鈕。

package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElements {

	public static void main(String[] args) {
		System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  
        
        WebDriver driver = new ChromeDriver();  
     
        driver.manage().window().maximize();  
       
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
          
        driver.get("https://news.baidu.com");  
        
        driver.findElement(By.id("kw")).sendKeys("Selenium");
        
        driver.findElement(By.id("su")).click();
        
	}

}
總結:

給元素上輸入字元,就呼叫sendkeys()方法這個方法的引數,一般都是String型別,模擬滑鼠左鍵,點選元素就呼叫click()方法,這兩個方法沒有返回值。基本上你的自動化測試指令碼,大部分方法都是圍繞這兩個使用頻率最高的事件服務。