Я использую 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, ''); возвращает объект 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 }
Что я делаю не так? Это правильный подход к использованию jQuery с Selenium WebDriver? Я могу получить значения атрибутов, но если executeScript находит объект (например, Button), он возвращает 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();