2015-07-21 52 views
1

我想用Selenium WebDriver中的JavaScript填充網頁上的文本框。一個同事this github在線存儲庫,用於填充文本框以加快速度。WebDriver JavascriptExecutor不能正常工作

當我運行該程序時,它會在((JavascriptExecutor)driver).executeScript("(function(window) { 'use strict';"處拋出一個錯誤,然後它會遍歷每個文本框,但不會將文本添加到該框中。我的同事和我昨天看了很長一段時間,比較了我們的代碼,並且無法弄清楚什麼是錯誤的。這是我的代碼和它產生的錯誤。

任何幫助表示讚賞。

Java代碼的

InputStream inputStream = ClientInformationComponent.class.getResourceAsStream("AutoFillClientInsuredComponent.js"); 

StringWriter writer = new StringWriter(); 

try 
{ 
    IOUtils.copy(inputStream, writer, "UTF-8"); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 

for (ClientDAO client : clients) 
{ 
    String script = writer.toString(); 

    try 
    { 
     if (driver instanceof JavascriptExecutor) 
     { 
      //ERROR IS THROWN HERE webdriver.components.ClientInformationComponent.fill(ClientInformationComponent.java:128) 
      ((JavascriptExecutor)driver).executeScript("(function(window) { 'use strict';"  
        + "var lastName = '" + client.getLastName() + "';" 
        + "var firstName = '" + client.getFirstName() + "';" 
        + "var middleName = '" + client.getMiddleName() + "';" 
        + "var suffix = '" + client.getSuffix() + "';" 
        + "var streetAddress = '" + client.getMemberAddress() + "';" 
        + "var city = '" + client.getMemberCity() + "';" 
        + "var zipCode = '" + client.getMemberZipCode() + "';"       + "var birthDate = '" + client.getDateOfBirth() + "';" 
        + "var homePhoneNumber = '" + client.getHomePhone() + "';" 
        + script); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

JavaScript文件

var document = window.document, 
    fieldValueMap = { 
     "LastName"    : lastName, 
     "FirstName"    : firstName, 
     "MiddleName"   : middleName, 
     "Suffix"    : suffix, 
     "MemberAddress"   : streetAddress, 
     "MemberCity"   : city, 
     "MemberZipCode"   : zipCode, 
     "MemberZipCodeSuffix" : memberZipCodeSuffix, 
     "DateOfBirth"   : birthDate, 
     "HomePhone"    : homePhoneNumber 

    }; 

Object.keys(fieldValueMap).forEach(function(name){ 

    var input = document.querySelector("form input[name='" + name + "']") 
        || document.querySelector("form select[name='" + name + "']") 
     || document.querySelector("form textarea[name='" + name + "']"); 

    input && input.type !== "hidden" && (input.value = fieldValueMap[ name ]); 
}); 

})(window); 

錯誤日誌

org.openqa.selenium.WebDriverException: JavaScript error (WARNING: The  server did not provide any stacktrace information) 
Command duration or timeout: 47 milliseconds 
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37' 
System info: host: 'COL-ISD-D56345', ip: '10.8.11.30', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_65' 
Session ID: 10b4929d-001c-412c-94bc-ce9d006b6dd0 
Driver info: org.openqa.selenium.ie.InternetExplorerDriver 
Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=accept, version=9, ie.usePerProcessProxy=false, ignoreProtectedModeSettings=false, cssSelectorsEnabled=true, requireWindowFocus=false, initialBrowserUrl=http://localhost:22000/, handlesAlerts=true, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}] 
Command duration or timeout: 356 milliseconds 
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40' 
System info: host: 'COL-ISD-D56444', ip: '10.8.12.163', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_45' 
Driver info: org.openqa.selenium.remote.RemoteWebDriver 
Capabilities [{browserAttachTimeout=0, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.usePerProcessProxy=false, ignoreZoomSetting=false, handlesAlerts=true, version=9, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, webdriver.remote.sessionid=863d35b9-ff0d-4b83-b4e0-983d9272353d, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:22000/, takesScreenshot=true, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=accept}] 
Session ID: 863d35b9-ff0d-4b83-b4e0-983d9272353d 
+0

你正在使用什麼驅動程序?在本地或網格中運行?生成的JS代碼是否通過linting? – Purus

+0

@Purus Selenium IEDriver 2.44.0它在網格中運行。我在本地機器上執行Java代碼,然後通過網格在虛擬機上運行腳本。我的本地PC是服務器,VM是客戶端。我沒有使用任何特定的linting軟件,但在運行Eclipse時沒有顯示任何錯誤。 – DrZoo

回答

0

我們發現了什麼問題是。我們使用的是IE 9,並且文檔here指出如果<!DOCTYPE html>標籤不存在,IE 9將默認顯示Quriks模式的頁面,也稱爲兼容模式

通過添加<!DOCTYPE html>標記將使IE 9的頁面呈現並不使用怪癖模式。您可能還需要包括meta標籤<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">meta標籤還允許您如果需要做content="IE=EmulateIE#content=IE#

我們運行到的問題是,我們使用的JavaScript方法不是模仿IE的特定版本受舊版IE的支持。我們經歷了一些嘗試,並嘗試將某些方法更改爲較舊的樣式,但我們不斷遇到越來越多的兼容性問題,這些方法在較舊的IE版本中不受支持。