1. 程式人生 > >Selenium(2): DOM元素定位、操作

Selenium(2): DOM元素定位、操作

DOM 元素定位
定位過程
  • WebDriver物件的findElement函式定義一個Web頁面元素;
  • findElements方法可以定位頁面的多個元素;
  • 使用WebElement物件來儲存定位的元素,以便後續操作;

id 定位

driver.findElement(By.id(“id的值”));

name定位

driver.findElement(By.name(“name的值”));

xpath 方式定位

driver.findElement(By.xpath(“xpath表示式”));

Class 名稱定位

driver.findElement(By.className(“class屬性”));

css 方式定位

driver.findElement(By.cssSelector(“css表示式”));

TagName 標籤名稱定位

driver.findElement(By.tagName(“標籤名稱”));

Jquery表示式定位

Js.executeScript(“return jQuery.find(“jquery表示式”)”)

連結的全部文字定位

driver.findElement(By.linkText(“連結的全部文字”));

連結的部分文字定位

driver.findElement(By.partialLinkText(“連結的部分文字”));

※ 如果使用 By.tagName,By.className 定位,只會返回第一個匹配元素,但元素class元素內容不止一個,而是類似<div class="btn-login btn">可以使用 By.cssSelector 的方式定位; 示例
  1. WebDriver driver =newFirefoxDriver();
  2. driver.get("http://www.assad.site");
  3. WebElement element1 = driver.findElement(By.id("login"));//通過id獲取元素
  4. WebElement element2 = driver
    .findElement(By.xpath(".//*[@id='content-detail']/div[6]/div"));//通過xpath獲取元素
  5. WebElement element3 = driver.findElement(By.className("btn"));//通過cssName獲取元素
DOM 元素操作

滑鼠單擊(用於按鈕等)

webelement.click();
鍵盤輸入(用於文字框等) webelement.setKey("輸入內容字串");
示例
  1. WebDriver driver =newFirefoxDriver();
  2. driver.get("http://www.assad.site");
  3. //鍵盤輸入事件
  4. WebElement element1 = driver.findElement(By.id("login-input"));
  5. element1.sendKey("hello world");
  6. //滑鼠點選事件
  7. WebElement element1 = driver.findElement(By.id("submit"));
  8. element1.click();
更加複雜的鍵盤,滑鼠操作 滑鼠操作事件 1、滑鼠左鍵點選
  1. Actions action =newActions(driver);
  2. // 滑鼠左鍵點選指定的元素
  3. action.click(driver.findElement(By.id("test")));
  4. // 滑鼠左鍵在座標為(300,400)位置做單擊操作
  5. action.moveByOffset(300,400).click();
2、滑鼠右鍵點選
  1. Actions action =newActions(driver);
  2. // 滑鼠右鍵點選指定的元素
  3. action.contextClick(driver.findElement(By.id("test")));
  4. // 滑鼠右鍵在座標為(300,400)位置做單擊操作
  5. action.moveByOffset(300,400).contextClick();
3.滑鼠雙擊操作
  1. Actions action =newActions(driver);
  2. // 滑鼠雙擊擊指定的元素
  3. action.doubleClick());
  4. // 滑鼠在座標為(300,400)位置做雙擊操作
  5. action.moveByOffset(300,400).doubleClick();
4. 滑鼠懸停操作
  1. Actions action =newActions(driver);
  2. // 滑鼠懸停在 onElement 元素的位置
  3. action.clickAndHold(driver.findElement(By.id("test"));
  4. // 滑鼠懸停座標位置
  5. action.moveByOffset(300,400).clickAndHold();
5、滑鼠釋放操作
  1. Actions action =newActions(driver);
  2. action.release();// 釋放滑鼠
6、滑鼠移動操作
  1. Actions action =newActions(driver);
  2. // 將滑鼠移到 toElement 元素中點
  3. action.moveToElement(toElement);
  4. // 以滑鼠當前位置或者 (0,0) 為中心開始移動到 (xOffset, yOffset) 座標軸
  5. action.moveByOffset(xOffset,yOffset);
7、滑鼠拖拽動作
  1. Actions action =newActions(driver);
  2. // 滑鼠拖拽動作,將 source 元素拖放到 target 元素的位置
  3. action.dragAndDrop(source,target);
  4. // 滑鼠拖拽動作,將 source 元素拖放到 (xOffset, yOffset) 位置
  5. action.dragAndDrop(source,xOffset,yOffset);
鍵盤操作事件 1. 普通鍵盤模擬,使用 sendKeys(keysToSend) ,如正常的鍵盤按鍵和 空格,Backspace等;
  1. Actions action =newActions(driver);
  2. //在網頁檢視中執行按鍵操作
  3. action.sendKeys(Keys.SPACE);// 模擬按下並釋放空格鍵
  4. action.sendKeys(Keys.TAB);// 模擬按下並釋放 TAB 鍵
  5. //對某個DOM元素執行按鍵操作(如input表單等)
  6. action.sendKeys(element,"String would be send");
2、組合鍵模擬,使用 keyDown(key)、keyUp(key) 分別執行鍵盤按鍵的按下和釋放;
  1. Actions action =newActions(driver);
  2. action.keyDown(Keys.CONTROL);// 按下 Ctrl 鍵
  3. action.keyDown(Keys.SHIFT);// 按下 Shift 鍵
  4. action.keyDown(Key.ALT);// 按下 Alt 鍵
  5. action.keyUp(Keys.CONTROL);// 釋放 Ctrl 鍵
  6. action.keyUp(Keys.SHIFT);// 釋放 Shift 鍵
  7. action.keyUp(Keys.ALT);// 釋放 Alt 鍵
※ 如果action操作沒有反應,可以對Action物件呼叫perform()方法