使用Selenium Webdriver执行JavaScript

时间:2017-05-31 16:04:06

标签: excel-vba selenium-webdriver vba excel

您好我正在尝试使用Selenium Wrapper在本机Excel应用程序中的VBA中执行JavaScript。

以下代码在Chrome控制台上执行JavaScript并为我提供预期的输出。

$x("//label[text()[contains(.,'British')]]")[0].children[1].children[0].click()

要执行JavaScript,通常需要使用双引号,但VBA不接受这个,因为它有两个双引号。

driver.ExecuteScript("$x("//label[text()[contains(.,'British')]]")[0].children[1].children[0].click()")

我试图将它定义为另一个带有值连接的变量的字符串,但它仍然给我错误。

我不希望findElementByXpath与click方法一起使用。如果有人知道解决方法,请求。

修改1 而不是$ x,它适用于chrome,使用document.evaluate在webdriver中工作。

1 个答案:

答案 0 :(得分:1)

为了它的价值,

    <html>
    <head>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.datatables.net/1.10.15/css/dataTables.bootstrap.min.css" rel="stylesheet">

    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>

    <script src="https://code.angularjs.org/1.6.1/angular.min.js"></script>  

        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"></script>
    <script src="https://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 
    <style>
      .full button span {
        background-color: limegreen;
        border-radius: 32px;
        color: black;
      }
      .partially button span {
        background-color: orange;
        border-radius: 32px;
        color: black;
      }
    </style>

    </head>

    <div class="container">

    <div ng-app="myApp" ng-controller="MyCtrl">

       <div class="row">
           <div class="col-sm-3" style="background-color:yellow;">
             <p>Department ID::{{did}}</p>
            </div>

           <div class="col-sm-3" style="background-color:skyblue;">
            <p>Dept  Name:{{dname}}</p>
            </div>

            <div class="col-sm-3" style="background-color:pink;">
             <p>Supervisor name name:{{sp_name}}</p>
             </div>

                    <div class="col-sm-3">
            <p class="input-group">
              <input type="text" class="form-control" uib-datepicker-popup="{{format}}" 
              ng-model="list.dt" is-open="opened" min-date="minDate" max-date="'2018-06-22'"
              ng-model-options="{timezone: 'UTC'}" 
              datepicker-options="dateOptions" date-disabled="disabled(date, mode)"
              ng-required="true" close-text="Close" />
              <span class="input-group-btn"> 
                    <button type="button" class="btn btn-default" ng-click="open($event)">
                    <i class="glyphicon glyphicon-calendar"></i></button>
                  </span>
            </p>
           </div>
      </div>


    <table  class="table table-striped table-bordered">
        <thead>
          <tr>
    	 <th>Employee ID</th>
    	<th>name</th>
            <th><label>Attendence</label><br><span id="selectall" ng-click="selectAll()"><input 
        type="checkbox">{{selectedText}}</span></th>
    <th>comment</th>        

    </tr>  
     </thead>
        <tbody>
      
       <tr ng-repeat="data in list" ng-if="$index">
          <td> {{ data.eid }} </td>
          <td> {{ data.ename }} </td>

    <td> <input type="checkbox"  value="{{ data.eid}}"  ng-checked="data.checked" ng-model="data.checked"></td>
    <td>
    <input type="text" ng-model="data.cmnt" ></td>
     </tr>
    </tbody>
    </table>

<pre>{{list}}</pre>
    </div>

    <button type="button" ng-click="saveAll()">Save all</button>
    </div>

    </html>

应该写成这样:

driver.ExecuteScript("$x("//label[text()[contains(.,'British')]]")[0].children[1].children[0].click()")