1. 程式人生 > >【開源自動化測試疑難FAQ】【WebDriver】WebDriver啟動時白屏掛起問題解決方法(二)

【開源自動化測試疑難FAQ】【WebDriver】WebDriver啟動時白屏掛起問題解決方法(二)

       WebDriver啟動的時候很容易無限掛起,直到外圍框架設定的超時時間達到而退出執行,給測試執行帶來很大的困擾。上一篇文件WebDriver啟動時白屏掛起問題解決方法(一)給出的解決方案只是能夠部分地解決工具問題,但有時候這種hang死會發生在timeouts().pageLoadTimeout()發生作用之前。也就是說,這需要更為徹底的方法去解決這個問題,我想到最簡單的方式是用獨立的守護執行緒去看守,具體程式碼如下:

	private final int DRIVER_STATUS_TEST_TIMES = 2;
	private final int DRIVER_START_TIMEOUT = 30000;

	/**
	 * Description: start webdirver</BR>
	 * 內容描述:啟動WebDriver例項。
	 * 
	 * @param browserMode the browser mode
	 */
	private void startWebDriver(String browserMode){
		try {
			setBuildEnvChoice(browserMode);
			initalizeWebDriver(DRIVER_START_TIMEOUT);
			
			//the address "about:blank" is sometimes useless.
			ensureWebDriverStatus(browserMode, getServerAddress(), DRIVER_STATUS_TEST_TIMES);
			
			setPageLoadTimeout(maxLoadTime);
			setElementLocateTimeout(maxWaitfor);
			setScriptingTimeout(maxWaitfor);
			
			actionDriver = new Actions(driver);
			ASSERT = new StarNewAssertion(driver, LOG_ABS, className, logger, devidor);
			pass("webdriver new instance created");	
		} catch (Exception e) {
			LOG.error(e);
			throw new RuntimeException(e);
		}		
	}

	/**
	 * Description: start webdirver using browser iexplore</BR>
	 * 內容描述:預設選擇IE模式建立WebDriver例項。
	 */
	protected void startWebDriver() {
		startWebDriver("ie");
	}

	/**
	 * Description: start webdirver after capabilities settings completed.</BR>
	 * 內容描述:在做好配置之後建立WebDriver例項。
	 */
	private void initalizeWebDriver() {
		WebDriverListener listener = new WebDriverListener(LOG_ABS, className, logger, devidor);
		if (USE_DRIVERSERVER) {// 是否使用IEDirverServer
			driver = new EventFiringWebDriver(new RemoteWebDriver(service.getUrl(), capabilities)).register(listener);
		} else {
			try {
				URL url = new URL("http://localhost:" + server.getPort() + "/wd/hub");
				driver = new EventFiringWebDriver(new RemoteWebDriver(url, capabilities)).register(listener);
			} catch (MalformedURLException e) {
				throw new RuntimeException("illegal url!");				
			}
		}
	}
	
	/**
	 * Description: start and see if webdirver start successfully.</BR>
	 * 內容描述:建立並且判斷WebDriver例項是否啟動成功。
	 * 
	 * @param timeout timeout for start webdriver.
	 * @param redoCount retry times for start webdriver.
	 * @throws Exception
	 */
	private void initalizeWebDriver(long timeout, int redoCount) throws Exception {
		for (int i = 0; i < redoCount; i++) {
			Thread thread_start = new Thread(new Runnable() {
				public void run() {// 用一個獨立的執行緒啟動WebDriver
					initalizeWebDriver();
				}
			});
			thread_start.start();
			waitFor(thread_start, timeout);//為啟動WebDriver設定超時時間
			if (!thread_start.isAlive()) {
				return;
			} else {
				thread_start.interrupt();
				consoleError("start Webdriver failed 【" + i + "】 times!");
			}
			if (thread_start.isAlive() && i == redoCount){// 如果最終沒能啟動成功則丟擲錯誤
				thread_start.interrupt();
				throw new RuntimeException("can not start webdriver, check your platform configurations!");
			}
		}
	}
這裡只是部分程式碼,其餘部分不再羅列,有需要觀摩者,可以去github上面去看。

相關推薦

開源自動化測試疑難FAQWebDriverWebDriver啟動問題解決方法

       WebDriver啟動的時候很容易無限掛起,直到外圍框架設定的超時時間達到而退出執行,給測試執行帶來很大的困擾。上一篇文件WebDriver啟動時白屏掛起問題解決方法(一)給出的解決方案只是能夠部分地解決工具問題,但有時候這種hang死會發生在timeouts

開源自動化測試疑難FAQWebDriverWebDriver對SWFUpload的無奈之舉

       發現個極品開發在上載的時候毫無由頭的不去用公司通用的標準控制元件,居然用一個flash控制元件,一查發現叫SWFUpload。上google查了好一會,貌似目前WebDriver還是不支援對這玩意的處理的。 思考了一會,對網頁上的元件做自動化無非就是考慮js

開源自動化測試疑難FAQWebDriver幾種型別的元件的判斷

第一組就是對網頁彈出的提示資訊的判斷,也就是Dialog,對於等待時間的載入,這裡也可以用org.openqa.selenium.support.ui.WebDriverWait去實現,不過我這裡還是給出簡單的自定義的迴圈查詢。 /** * judge if th

bash: ssh: command not found解決方法linux

inux 配置 pan html clas client oop post bash 原文轉自:http://www.cnblogs.com/ahauzyy/archive/2013/04/25/3043699.html 今天在搭建hadoop的開發環境中,用的是ce

Android從無到有:手把手一步步教你使用最簡單的Fragment

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80579389 【本文適用讀者】         targetSdkVersion 版本大於等於 21,即 app 即將有可能

筆記計算機的運算方法

三、定點運算 1.移位運算 移位的意義   二進位制表示的機器數在相對於小數點作n位左移或右移時,其實質就是該數乘以或除以2n2n。當某計算機沒有乘除法運算線路時,可以採用移位和加法相結合,實現乘除運算。   計算機中機器數的字長往往是

實踐CTR預估中的貝葉斯平滑方法

1. 前言 這篇部落格主要是介紹如何對貝葉斯平滑的引數進行估計,以及具體的程式碼實現。 首先,我們回顧一下前文中介紹的似然函式,也就是我們需要進行最大化的目標函式: 下面我們就基於這個目標函式介紹怎樣估計引數。 2. 引數估計的幾種方法 1. 矩估計 矩估計在這裡有點亂

JEECG Dubbo專題Dubbo+Zookeeper+Spring整合應用篇-Dubbo基於Zookeeper實現分散式服務...

Dubbo與Zookeeper、Spring整合使用 Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。 一:單機模式安裝zookeepe

Tensorflow怎樣為你的網路預加工和打包訓練資料?:小資料集的處理方案

實驗環境:python2.7 第二篇我們來講一講小資料集的處理方法,小資料集一般多以文字儲存為主,csv是一種流行的資料格式,另外也有txt等。當然也會有.mat或者.npy這種經過處理的格式。 一.處理csv格式資料集 實驗資料集是鳶尾花卉資料集iris,格式是.csv

Android自動化測試遇到的問題及解決方法1

粘貼 png family 學習 再次 jmeter log 初始 mage 編者按:本文是小小小提姆在使用自動化測試工具TestWriter時的一點使用心得~我叫小小小提姆,是一名在IT行業的洪流中力爭上遊的軟件測試員,個人軟件測試擅長方向:1、功能測試(熟悉Fiddle

web自動化測試第12步:selenium中下拉框的解決方法Select

在之前,遇到下拉框的時候我們可以用兩次點選來選擇我們需要的選項,不過對於下拉框,我們的webdriver中有封裝的Select包單獨對於下拉框有一套處理的方法,我們可以來學習一下,然後在測試的時候根據不同的情況來選擇需要哪兒種方法。 1.select包方法的使用示例以及定

測試人員必學的軟件快速測試方法

軟件測試 快速測試 專項測試 自動化測試 缺陷管理 以下是測試專家Cem Kaner在黑盒軟件測試中總結的一些快速測試方法,這裏進行補充和調整,並同步更新到我們的測試知識共享庫中,使用時可靈活增刪改查。1.用戶界面 若軟件在應用商店中銷售,界面很可能成為用戶是否安裝或購買的重要因素 1).

手機app測試方法App測試-常見測試點

1安全測試  1.1軟體許可權 1)扣費風險:包括髮送簡訊、撥打電話、連線網路等 2)隱私洩露風險:包括訪問手機資訊、訪問聯絡人資訊等 3)對App的輸入有效性校驗、認證、授權、敏感資料儲存、資料加密等方面進行檢測 4)限制/允許使用手機功能接人網際網路 5)限制/允

GIS開源庫shapeLib的使用方法

前面介紹了shape API,接下來介紹 dBF API DBFOpen() DBFHandle DBFOpen( const char * pszDBFFile, const char * pszAccess ); pszDBFFile: The name of t

RobotFrameWork+自動化測試獲取元素屬性值

元素 com get 獲取 work inf 屬性 測試 9.png Get Element Attribute 用法: 例子: 【RobotFrameWork+自動化測試】獲取元素屬性值

Web自動化測試——代碼篇七常用方法——切換

final src fire desktop sta begin 新的 med 目前 方法總覽 Java Python Ruby 多表單切換 指定表單 switchTo().frame(id/name/定位元素) switch_to.frame(id/name

Web自動化測試——代碼篇五常用方法——鼠標鍵盤事件

回退 uil let 百度 home build 測試 chains nbsp Java Python Ruby 鼠標事件 右擊 Actions action = new Actions(driver); action.contextClick(inputBo

Web自動化測試——代碼篇八常用方法——上傳/下載文件

.com instance timeunit 鍵盤 .sh exception lse NPU 組合 上傳文件 對於Web頁面的上傳功能實現一般有一下倆種方式: 普通上傳:將本地文件的路徑作為一個值放在input標簽中,通過form表單將這個值提交給服務器(不做介紹sen

Web自動化測試——代碼篇四常用方法——常見元素操作

fin pack 百度輸入 submit .get ted baidu 百度搜 內容 瀏覽器這個大框架我們都能控制,區區頁面小元素又能奈我們何!!!之前的【Web自動化測試——代碼篇二】條條大路找元素 已經講述了許多獲取元素的方法,在此基礎上我們來認識幾個元素最常見的相關操

Mac + Python3.6 + facebook-wda之IOS自動化:安裝facebook-wda庫並編寫簡易自動化測試腳本

以及 應用 hot cit you ins dfa 查看端口 介紹 上一篇介紹完如何安裝WDA,接下來開始正式安裝開發庫並編寫自動化腳本。 目錄: 一、安裝facebook-wda庫 二、通過WEditor定位元素 三、附錄:學習資料