2014-12-05 22 views
4

我使用Selenium WebDriver,我想執行jQuery代碼來查找一些元素。在Selenium WebDriver中使用jQuery - 如何將JSON對象轉換爲WebElement?

我的代碼如下:

public function uploadGrantDoc() { 
    $script = "return $('#itemlist .grant_file_upload:first');"; 

    $grantsDocsfileInput = $this->webdriver->executeScript($script, ''); 

    $grantsDocsfileInputWebElement = $this->typecast($grantsDocsfileInput, 'WebElement'); 

    var_dump($grantsDocsfileInputWebElement); 

    // Sets the Grants' Docs File Input value 
    $grantsDocsfileInputWebElement->sendKeys(array($this->grantsDocsFileDirectory)); 

    // Submits the Form 
    $grantsDocsfileInputWebElement->submit(); 

    // The success message must be present 
    $this->checkIfSuccessMessageIsPresent(); 
} 

function typecast($old_object, $new_classname) { 
    if(class_exists($new_classname)) { 
     $old_serialized_object = serialize($old_object); 
     $new_serialized_object = 'O:' . strlen($new_classname) . ':"' . $new_classname . '":' . 
         substr($old_serialized_object, $old_serialized_object[2] + 7); 
     return unserialize($new_serialized_object); 
    } 
    else 
     return false; 
} 

executeScript($腳本, '');返回一個WebElement JSON對象,我需要將它轉換爲WebElement以便代碼工作,所以我使用了typecast($ grantsDocsfileInput,'WebElement');

但是,它不能正確投射。

這是預期的var_dump結果:

object(WebElement)#15 (2) { 
    ["requestURL":protected]=> 
    string(83) "http://localhost:4444/wd/hub/session/faadc168-4e8d-4fd5-b777-906885697030/element/6" 
    ["_curl":protected]=> 
    NULL 
} 

這是結果我得到:

object(WebElement)#13 (9) { 
    ["requestURL":protected]=> 
    NULL 
    ["_curl":protected]=> 
    NULL 
    ["message"]=> 
    string(49) "java.lang.String cannot be cast to java.util.List" 
    ["localizedMessage"]=> 
    string(49) "java.lang.String cannot be cast to java.util.List" 
    ["cause"]=> 
    NULL 
    ["class"]=> 
    string(28) "java.lang.ClassCastException" 
    ["hCode"]=> 
    int(1535747955) 
    ["stackTrace"]=> 
    array(20) { 
    [0]=> 
    object(stdClass)#35 (7) { 
     ["fileName"]=> 
     string(18) "ExecuteScript.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(43) 
     ["className"]=> 
     string(55) "org.openqa.selenium.remote.server.handler.ExecuteScript" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(17) "setJsonParameters" 
     ["hCode"]=> 
     int(804634460) 
    } 
    [1]=> 
    object(stdClass)#36 (7) { 
     ["fileName"]=> 
     string(17) "ResultConfig.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(100) 
     ["className"]=> 
     string(51) "org.openqa.selenium.remote.server.rest.ResultConfig" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(517694315) 
    } 
    [2]=> 
    object(stdClass)#37 (7) { 
     ["fileName"]=> 
     string(27) "JsonHttpCommandHandler.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(172) 
     ["className"]=> 
     string(56) "org.openqa.selenium.remote.server.JsonHttpCommandHandler" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(13) "handleRequest" 
     ["hCode"]=> 
     int(-924916998) 
    } 
    [3]=> 
    object(stdClass)#38 (7) { 
     ["fileName"]=> 
     string(18) "DriverServlet.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(201) 
     ["className"]=> 
     string(47) "org.openqa.selenium.remote.server.DriverServlet" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(13) "handleRequest" 
     ["hCode"]=> 
     int(-473869175) 
    } 
    [4]=> 
    object(stdClass)#39 (7) { 
     ["fileName"]=> 
     string(18) "DriverServlet.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(163) 
     ["className"]=> 
     string(47) "org.openqa.selenium.remote.server.DriverServlet" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "doPost" 
     ["hCode"]=> 
     int(-1874935833) 
    } 
    [5]=> 
    object(stdClass)#40 (7) { 
     ["fileName"]=> 
     string(16) "HttpServlet.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(727) 
     ["className"]=> 
     string(30) "javax.servlet.http.HttpServlet" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(7) "service" 
     ["hCode"]=> 
     int(1081440705) 
    } 
    [6]=> 
    object(stdClass)#41 (7) { 
     ["fileName"]=> 
     string(18) "DriverServlet.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(129) 
     ["className"]=> 
     string(47) "org.openqa.selenium.remote.server.DriverServlet" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(7) "service" 
     ["hCode"]=> 
     int(1913428015) 
    } 
    [7]=> 
    object(stdClass)#42 (7) { 
     ["fileName"]=> 
     string(16) "HttpServlet.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(820) 
     ["className"]=> 
     string(30) "javax.servlet.http.HttpServlet" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(7) "service" 
     ["hCode"]=> 
     int(1081440798) 
    } 
    [8]=> 
    object(stdClass)#43 (7) { 
     ["fileName"]=> 
     string(18) "ServletHolder.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(428) 
     ["className"]=> 
     string(44) "org.openqa.jetty.jetty.servlet.ServletHolder" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(1066597463) 
    } 
    [9]=> 
    object(stdClass)#44 (7) { 
     ["fileName"]=> 
     string(19) "ServletHandler.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(680) 
     ["className"]=> 
     string(45) "org.openqa.jetty.jetty.servlet.ServletHandler" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(8) "dispatch" 
     ["hCode"]=> 
     int(1390736799) 
    } 
    [10]=> 
    object(stdClass)#45 (7) { 
     ["fileName"]=> 
     string(19) "ServletHandler.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(571) 
     ["className"]=> 
     string(45) "org.openqa.jetty.jetty.servlet.ServletHandler" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(-1689621664) 
    } 
    [11]=> 
    object(stdClass)#46 (7) { 
     ["fileName"]=> 
     string(16) "HttpContext.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(1526) 
     ["className"]=> 
     string(33) "org.openqa.jetty.http.HttpContext" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(1685351418) 
    } 
    [12]=> 
    object(stdClass)#47 (7) { 
     ["fileName"]=> 
     string(16) "HttpContext.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(1479) 
     ["className"]=> 
     string(33) "org.openqa.jetty.http.HttpContext" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(1685351371) 
    } 
    [13]=> 
    object(stdClass)#48 (7) { 
     ["fileName"]=> 
     string(15) "HttpServer.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(920) 
     ["className"]=> 
     string(32) "org.openqa.jetty.http.HttpServer" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(7) "service" 
     ["hCode"]=> 
     int(1779095633) 
    } 
    [14]=> 
    object(stdClass)#49 (7) { 
     ["fileName"]=> 
     string(19) "HttpConnection.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(820) 
     ["className"]=> 
     string(36) "org.openqa.jetty.http.HttpConnection" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(7) "service" 
     ["hCode"]=> 
     int(-1150970931) 
    } 
    [15]=> 
    object(stdClass)#50 (7) { 
     ["fileName"]=> 
     string(19) "HttpConnection.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(986) 
     ["className"]=> 
     string(36) "org.openqa.jetty.http.HttpConnection" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(10) "handleNext" 
     ["hCode"]=> 
     int(1892375929) 
    } 
    [16]=> 
    object(stdClass)#51 (7) { 
     ["fileName"]=> 
     string(19) "HttpConnection.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(837) 
     ["className"]=> 
     string(36) "org.openqa.jetty.http.HttpConnection" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(-954717551) 
    } 
    [17]=> 
    object(stdClass)#52 (7) { 
     ["fileName"]=> 
     string(19) "SocketListener.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(243) 
     ["className"]=> 
     string(36) "org.openqa.jetty.http.SocketListener" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(16) "handleConnection" 
     ["hCode"]=> 
     int(91812189) 
    } 
    [18]=> 
    object(stdClass)#53 (7) { 
     ["fileName"]=> 
     string(19) "ThreadedServer.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(358) 
     ["className"]=> 
     string(36) "org.openqa.jetty.util.ThreadedServer" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(6) "handle" 
     ["hCode"]=> 
     int(-1347859604) 
    } 
    [19]=> 
    object(stdClass)#54 (7) { 
     ["fileName"]=> 
     string(15) "ThreadPool.java" 
     ["class"]=> 
     string(27) "java.lang.StackTraceElement" 
     ["lineNumber"]=> 
     int(537) 
     ["className"]=> 
     string(43) "org.openqa.jetty.util.ThreadPool$PoolThread" 
     ["nativeMethod"]=> 
     bool(false) 
     ["methodName"]=> 
     string(3) "run" 
     ["hCode"]=> 
     int(172881960) 
    } 
    } 
    ["screen"]=> 
    NULL 
} 

我在做什麼錯?這是與Selenium WebDriver一起使用jQuery的正確方法嗎? 我可以獲取屬性值,但是如果executeScript找到一個對象(例如一個Button),它將返回一個stdClass,並且我無法將其轉換爲WebElement以便單擊該按鈕,例如。

+0

你爲什麼要使用一個叫 「獲得()」 在你的jQuery聲明jQuery選擇器?所有這一切,都是一個CSS選擇器,可以通過Selenium本地完成,從而解決您的問題。 jQuery只是在這裏添加不必要的複雜。 – Arran 2014-12-05 15:00:01

+0

在一些測試用例中,jQuery會簡化代碼並提高效率,因此我工作的公司希望我實現使用jQuery運行測試的可用性。 我事先搜索過,所以我知道這是可能的,但不幸的是我無法將JSON對象轉換爲WebElement – 2014-12-05 15:17:13

+0

由於這個問題在某些方面與PHP WebDriver綁定實現有關(即不同的綁定可能會返回不同的對象結構) ,您是否嘗試在PHP綁定的項目回購中提出問題或提出問題?那裏的作者和/或用戶可以更好地幫助你。另外,var轉儲看起來像什麼沒有類型轉換?對於你的這個特殊情況,如果你使用了像Java那樣的支持語言,那麼在那裏處理/轉換的效果會更好。 – David 2015-01-14 02:40:25

回答

0

這樣的事情呢?這不是很容易嗎?

WebElement p = (WebElement)((JavascriptExecutor)driver) 
    .executeScript("return document.documentElement;"); 

在PHP中,這將是:

$element = (WebElement)$this->webdriver->executeScript("return document.documentElement;"); 
+0

你不能用PHP – 2015-02-19 17:45:39

+0

那麼做。我不是PHP程序員,但我相信你可以在PHP中輸入'cast'。 – djangofan 2015-02-19 22:18:01

+0

我試着這樣做: '$ grantsDocsfileInput =(WebElement)$這個 - > webdriver-> executeScript( '回報$( 「#ITEMLIST .grant_file_upload:第一」)',陣列());' 但我得到「語法錯誤意外:變量$ this」 – 2015-02-24 16:10:29

0

我想你只需要

return $('#itemlist .grant_file_upload:first').get();