简体   繁体   English

将jQuery与Selenium WebDriver一起使用 - 如何将JSON对象转换为WebElement?

[英]Using jQuery with Selenium WebDriver - How to cast JSON Object to WebElement?

I'm using Selenium WebDriver and I'd like to execute jQuery code to find some elements. 我正在使用Selenium WebDriver,我想执行jQuery代码来查找一些元素。

My code is as follows: 我的代码如下:

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, ''); executeScript($ script,''); returns a WebElement JSON Object and I need to cast it to WebElement in order for the code to work, so I use typecast($grantsDocsfileInput, 'WebElement'); 返回一个WebElement JSON对象,我需要将它转换为WebElement才能使代码工作,所以我使用了类型转换($ grantsDocsfileInput,'WebElement');

However, it's not casting correctly. 但是,它没有正确投射。

This is the expected var_dump result: 这是预期的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
}

This is the result I get: 这是我得到的结果:

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
}

What am I doing wrong? 我究竟做错了什么? Is this the correct approach to use jQuery with Selenium WebDriver? 这是在Selenium WebDriver中使用jQuery的正确方法吗? I can get attribute values but if executeScript finds an Object (eg a Button) it returns a stdClass and I can't convert it to WebElement in order to click the Button, for example. 我可以获取属性值但是如果executeScript找到一个Object(例如一个Button),它将返回一个stdClass,我无法将其转换为WebElement以便单击Button,例如。

What about something like this instead? 相反,这样的事情怎么样? Wouldn't this be a lot easier? 这会不会容易多了?

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

In PHP, that would be: 在PHP中,那将是:

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

我想你只需要在你的jquery语句中调用“get()”

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM