Я использую Selenium WebDriver, и я хотел бы выполнить код jQuery, чтобы найти некоторые элементы.
Мой код выглядит следующим образом:
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 ($ script, »); возвращает объект JSON объекта WebElement, и мне нужно привести его к 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
}
Что я делаю неправильно? Это правильный подход для использования jQuery с Selenium WebDriver?
Я могу получить значения атрибутов, но если executeScript находит объект (например, кнопку), он возвращает stdClass, и я не могу преобразовать его в WebElement, например, для нажатия кнопки.
А как насчет этого? Разве это не будет намного проще?
WebElement p = (WebElement)((JavascriptExecutor)driver)
.executeScript("return document.documentElement;");
В PHP это будет:
$element = (WebElement)$this->webdriver->executeScript("return document.documentElement;");
Я думаю, что вам просто нужно вызвать «get ()» в вашем заявлении JQuery
return $('#itemlist .grant_file_upload:first').get();