我使用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以便單擊該按鈕,例如。
你爲什麼要使用一個叫 「獲得()」 在你的jQuery聲明jQuery選擇器?所有這一切,都是一個CSS選擇器,可以通過Selenium本地完成,從而解決您的問題。 jQuery只是在這裏添加不必要的複雜。 – Arran 2014-12-05 15:00:01
在一些測試用例中,jQuery會簡化代碼並提高效率,因此我工作的公司希望我實現使用jQuery運行測試的可用性。 我事先搜索過,所以我知道這是可能的,但不幸的是我無法將JSON對象轉換爲WebElement – 2014-12-05 15:17:13
由於這個問題在某些方面與PHP WebDriver綁定實現有關(即不同的綁定可能會返回不同的對象結構) ,您是否嘗試在PHP綁定的項目回購中提出問題或提出問題?那裏的作者和/或用戶可以更好地幫助你。另外,var轉儲看起來像什麼沒有類型轉換?對於你的這個特殊情況,如果你使用了像Java那樣的支持語言,那麼在那裏處理/轉換的效果會更好。 – David 2015-01-14 02:40:25