1. 程式人生 > >WebDriver應用例項(java)——操作富文字框

WebDriver應用例項(java)——操作富文字框

        富文字框和普通的文字框定位有較大的區別,富文字框常見的實現用到Frame標籤,並且Frame裡面實現了一個完整的HTML網頁結構,所以使用普通的定位模式無法直接定位到富文字框物件。

        以http://mail.sohu.com為例,介紹兩種方法讀取富文字框。

        方法一:

package cn.om.webdriverapi;


import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;

public class TestRichTextBox1 {

	WebDriver driver;
	String url;

	@Test
	public void testSohuMailWriteEMail() {
		driver.get(url);
		//設定獲取元素的超時時間為5秒
		driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
		WebElement username = driver.findElement(By.xpath(".//*[@id='theme']/form/div[1]/div[1]/input"));
		WebElement password = driver.findElement(By.xpath(".//*[@id='theme']/form/div[2]/div[1]/input"));
		WebElement sub = driver.findElement(By.xpath(".//*[@id='theme']/form/div[5]/input"));
		
		//輸入賬號,密碼,點選登入。由於有驗證碼,會跳轉到輸入驗證碼的頁面
		username.sendKeys("fosterwu");
		password.sendKeys("1111");
		sub.click();
		
		//等待10秒,手工輸入驗證碼
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//輸入驗證碼後,再次點選登入。
		sub.click();
		//手機安全認證,點選【下次再說】按鈕
		WebElement notdo=driver.findElement(By.xpath(".//*[@id='theme']/div[1]/div[1]/div[4]/span[2]"));
		notdo.click();
		
		
		WebDriverWait wait=new WebDriverWait(driver, 15);
		//顯示等待15秒,通過查詢【寫郵件】按鈕,判斷是否已經成登入到郵箱中
	    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='addSkinClass']/div[4]/div/ul/li[1]")));

	    //定位【寫郵件】的按鈕,點選後進入寫信頁面
	    WebElement writeMailButton=driver.findElement(By.xpath(".//*[@id='addSkinClass']/div[4]/div/ul/li[1]"));
	    writeMailButton.click();
	    
	    //定位發件人輸入框,輸入要測試的資料
	    WebElement recipients=driver.findElement(By.xpath(".//*[@id='mailContent']/div/div[1]/div[1]/div[1]/div[1]/div/span/input"));
	    recipients.sendKeys("
[email protected]
"); //由於發件人輸入進去後,要回車或者點選下才能編輯下一個。因此加上點選回車的操作 Robot robot=null; try { robot=new Robot(); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); //定位主題輸入框,輸入要測試的資料 WebElement topic=driver.findElement(By.xpath(".//*[@id='mailContent']/div/div[1]/div[1]/div[4]/input")); topic.sendKeys("給自己的信"); //通過tabname找到iframe元素,切換到iframe中 WebElement iframe=driver.findElement(By.tagName("iframe")); driver.switchTo().frame(iframe); //宣告JavaScriptExecutor物件來執行JavaScript指令碼 JavascriptExecutor js=(JavascriptExecutor)driver; //在iframe中,查詢到編輯區域物件p,設定html格式的文字內容,即正文內容 js.executeScript("document.getElementsByTagName('p')[0].innerHTML='<b>郵件要傳送的內容<b>'"); //切換到預設頁面。(主頁面) driver.switchTo().defaultContent(); //點擊發送 WebElement send=driver.findElement(By.xpath(".//*[@id='mailContent']/div/div[2]/span[1]")); send.click(); } @BeforeMethod public void beforeMethod() { url = "http://mail.sohu.com"; System.setProperty("webdriver.firefox.bin", "D:/Mozilla Firefox/firefox.exe"); driver = new FirefoxDriver(); } @AfterMethod public void afterMethod() { driver.quit(); } }

        這種方法的優點是,可以支援HTML格式的文字作為富文字框的文字輸入內容。

        缺點是,因為不同網頁的富文字框的實現機制都不同,定位到富文字框的文字編輯區域物件比較難,需要熟練了解HTML程式碼含義和frame的進出方法,對於指令碼定位實現的能力要求較高。

        方法二:

package cn.om.webdriverapi;


import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;

public class TestRichTextBox2 {

	WebDriver driver;
	String url;

	@Test
	public void testRichTextBox2() {
		driver.get(url);
		// 設定獲取元素的超時時間為5秒
		driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
		WebElement username = driver.findElement(By.xpath(".//*[@id='theme']/form/div[1]/div[1]/input"));
		WebElement password = driver.findElement(By.xpath(".//*[@id='theme']/form/div[2]/div[1]/input"));
		WebElement sub = driver.findElement(By.xpath(".//*[@id='theme']/form/div[5]/input"));

		// 輸入賬號,密碼,點選登入。由於有驗證碼,會跳轉到輸入驗證碼的頁面
		username.sendKeys("fosterwu");
		password.sendKeys("1111");
		sub.click();

		// 等待10秒,手工輸入驗證碼
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 輸入驗證碼後,再次點選登入。
		sub.click();
		// 手機安全認證,點選【下次再說】按鈕
		WebElement notdo = driver.findElement(By.xpath(".//*[@id='theme']/div[1]/div[1]/div[4]/span[2]"));
		notdo.click();

		WebDriverWait wait = new WebDriverWait(driver, 15);
		// 顯示等待15秒,通過查詢【寫郵件】按鈕,判斷是否已經成登入到郵箱中
		wait.until(
				ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='addSkinClass']/div[4]/div/ul/li[1]")));

		// 定位【寫郵件】的按鈕,點選後進入寫信頁面
		WebElement writeMailButton = driver.findElement(By.xpath(".//*[@id='addSkinClass']/div[4]/div/ul/li[1]"));
		writeMailButton.click();

		// 定位發件人輸入框,輸入要測試的資料
		WebElement recipients = driver
				.findElement(By.xpath(".//*[@id='mailContent']/div/div[1]/div[1]/div[1]/div[1]/div/span/input"));
		recipients.sendKeys("
[email protected]
"); // 由於發件人輸入進去後,要回車或者點選下才能編輯下一個。因此加上點選回車的操作 pressEnterKey(); // 定位主題輸入框,輸入要測試的資料 WebElement topic = driver.findElement(By.xpath(".//*[@id='mailContent']/div/div[1]/div[1]/div[4]/input")); topic.sendKeys("給自己的信"); // 通過tab鍵切換到富文字框 pressTabKey(); setAndctrlVClipboardData("郵件傳送的正文內容"); //點擊發送 WebElement send=driver.findElement(By.xpath(".//*[@id='mailContent']/div/div[2]/span[1]")); send.click(); } @BeforeMethod public void beforeMethod() { url = "http://mail.sohu.com"; System.setProperty("webdriver.firefox.bin", "D:/Mozilla Firefox/firefox.exe"); driver = new FirefoxDriver(); } @AfterMethod public void afterMethod() { driver.quit(); } public void pressTabKey() { Robot robot = null; try { robot = new Robot(); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } robot.keyPress(KeyEvent.VK_TAB); robot.keyRelease(KeyEvent.VK_TAB); } public void pressEnterKey() { Robot robot = null; try { robot = new Robot(); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); } public void setAndctrlVClipboardData(String s) { // 宣告StringSelection物件,並使用函式的string引數來完成例項化 StringSelection stringSelection = new StringSelection(s); // 使用Toolkit物件的setContents方法將字串放到剪下板上 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null); // 宣告Robot物件 Robot robot = null; try { robot = new Robot(); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 呼叫KeyPress來實現按下Crtl鍵 robot.keyPress(KeyEvent.VK_CONTROL); // 呼叫KeyPress來實現按下V鍵 robot.keyPress(KeyEvent.VK_V); // 呼叫KeyPress來釋放V鍵 robot.keyRelease(KeyEvent.VK_V); // 呼叫KeyPress來釋放crtl鍵 robot.keyRelease(KeyEvent.VK_CONTROL); } }

        這個方法的優點是,無論什麼種類的富文字框,只要找到它的上面緊鄰的元素,通過按tab鍵的方式均可以進入到富文字框的文字編輯區域,可以使用一種方法解決所有型別的富文字框編輯區域的定位問題。

        缺點是,不能在富文字框編輯區域中進行HTML格式的文字輸入。

        兩種方法各有各的好處,在實際使用的時候,根據實際情況來進行選擇。

相關推薦

WebDriver應用例項(java)——操作文字

        富文字框和普通的文字框定位有較大的區別,富文字框常見的實現用到Frame標籤,並且Frame裡面實現了一個完整的HTML網頁結構,所以使用普通的定位模式無法直接定位到富文字框物件。        以http://mail.sohu.com為例,介紹兩種方法讀取

WebDriver應用例項(java)——精確比較網頁截圖圖片

        在測試過程中,常常需要對核心頁面進行截圖,並且使用測試過程中的截圖和以前測試過程中的截圖進行比對。如果能精確匹配,則認為對比成功;如果頁面發生任何細微的變化,都會認為不匹配。        具體例項如下:package cn.om.webdriverapi;

selenium如何處理特殊的文字------例如知乎

常見的富文字框是input, textarea文字框,如果有iframe巢狀,需要進行表單切換,可以參考https://blog.csdn.net/supramolecular/article/details/81364061, 但是對於div富文字框,既不包括input 也不包括 textar

Ueditor 百度文字的使用(二次渲染)其他的在文件中都有

富文字編輯器有很多。好用的,不好用的,功能簡單的,功能複雜的。 現在,我選擇的是百度的UEditor編輯器。這個編輯器的唯一有點就是功能多。比kindeditor 這些編輯器的功能要多。當然,像layui 提供的富文字框我沒有用,所以,現在不能拿來對比。因為當初想要用layui的時候,我套了一下

關於c#MVC後臺接收百度文字中的值失敗原因的解決!

最近在使用百度富文字框的時候 ,遇見了一個令我很無語的操作,我在前臺使用jQuery獲取百度富文字框中的值,路徑什麼的都是對的, 也沒有語法錯誤,但是就進不了後臺,後臺就一直接收不到資料 最後通過百度找到了解決的方法:如下 HttpRequest 類使用輸入驗證標誌來跟蹤是否對通過 Co

文字TinyMCE上傳本地圖片基本配置

注意:上傳本地圖片是TinyMCE 4.3才新引入的功能,所以該配置只適合4.3及其以上 <!doctype html> <html> <head> <script src='https://cloud.tinymce.com/stable/tinymce.m

使用vue製作文字

這裡分享一個富文字框外掛,如圖 使用方法: 1-安裝 npm install --save vue2-editor 或者 yarn add vue2-editor 2- 使用 // Basic Use - Covers most scenarios

java文字編輯器的使用

一,首先要引入富文字編輯器的js  二,在你需要新增編輯器的jsp頁面中加入兩個js標籤引用 <script type="text/javascript" charset="utf-8" src="/js/kindeditor-4.1.10/kindeditor-all

前臺用UMeditor文字的形式存取內容

完成效果圖如下: 可以去官網:https://ueditor.baidu.com/website/index.html ue版本功能多,um版本日常功能都有,我下載的um把版本 1)  需要依賴static/Ueditor <link href="${pa

自己動手實現簡易的div可編輯文字及按下tab鍵後增加4個空格功能

需求分析:最近需要製作一個簡單的使用者評論輸入框,在網上找了一些富文字輸入框,但是它們的功能太多,不適合自己的需求,於是決定自己動手實現一個簡易的富文字輸入框。第一步:想要實現富文字輸入框並不是難事,在<div>標籤內加入   contenteditable="t

Java刪除文字的標籤

1、富文字格式是什麼? 富文字格式是指使用者在富文字框輸入的類容,這些內容在儲存的時候會將你操作的樣式利用程式碼的形式儲存到資料庫,從資料庫拿出資料的時候,這些程式碼又會重新轉成樣式。 2、富文字中除了刪除標籤獲取到文字以外,還有其他的方式能只獲取文字嗎? 可以的。可以將富文字轉成文字!

Java文字轉成文字的格式傳送給前端

一、富文字是什麼? 富文字格式(Rich Text Format, 一般簡稱為RTF)是一種跨平臺文件格式,由微軟公司開發。大多數的文書處理軟體都能讀取和儲存RTF文件。 富文字UEditor官網:http://ueditor.baidu.com/website/ 想具體的瞭解UEdit

vue-cli webpack 引入 wangeditor(輕量級文字)

1:使用npm下載: //(注意 wangeditor 全部是小寫字母) npm install wangeditor 2: 直接在專案模板中引用 import E from 'wanged

thinkphp5下百度文字UEditor的使用

1到官網下載 UEditor 最新版2解壓下載的包,將解壓後的目錄放到thinkphp public資料夾下3. 引用時    html頁面<body><!-- 載入編輯器的容器 --><scriptid="container"name="con

文字中提取圖片路徑(java 解析文字處理 img 標籤)

很多專案都需要到富文字來新增內容,就好比新聞啊,旅遊景點之類的,都需要使用富文字去新增資料,然而怎麼我這邊就發現了兩個問題 怎樣將富文字的圖片的 src 獲取出來? 方法一: 利用正則表示式: public static List<String> getImgStr(String h

如何獲取文字中的內容

js程式碼: <!-- 文字編輯器 開始 --> <textarea name="content" id="contect_text" class="ckedito

在html頁面寫一個文字

第一步:獲取到富文字框的這個檔案,連結地址:https://ckeditor.com/cke4/builder(1)裡面有幾個選擇,看你需求自己進行選擇,然後滑鼠一直拖到最下面,開始下載包        下面我只是舉個例子:我選擇的事第三個full;後面還有些選擇類似。注意:

文字的使用

相關資料下載地址 首先引進相關的js、css <link rel="stylesheet" href="${basePath}/static/font-awesome-3.2.1/css/font-awesome.min.css" type="text/css"> <lin

專案中用到的文字編輯器wangEditor

文件地址:http://www.wangeditor.com/index.html  <div id="div1"></div> <script src="js/wangEditor.min.js"></script> var E = w

20170315MFC04_樹形控制元件文字

MFC: 1:MFC是windows下程式設計的基準,是所有桌面應用程式的鼻祖。 樹形控制元件: 1:適合表示有層次的關係,就是有層次的節點。 2:原始操作:增刪改查,樹形控制元件的刪除是所有子集全部刪除,類似於資料夾的關係。 3:裡面的資料使用list來進行承載的。插入等