悠悠小仙仙 发表于 2017-7-14 11:51:35

【转帖】WebDriver拾级而上(13) – 调用Java Script


在用selenium 1.X的时候常常会用到geteval_r()方法来执行一段js脚本来对页面进行处理。
当然selenium webdriver也提供这样的一个方法:JavascriptExecutor.executeScript(string)
例如:
CODE:
<font size="4">import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;

public classSimpleExample {   
    public static void main(String[] args) {
      ChromeDriver driver = new ChromeDriver();
      driver.executeAsyncScript("arguments(); alert('Hello')");
      try {
            Thread.sleep(3000);
      } catch (InterruptedException e) {
            e.printStackTrace();
      }
      driver.switchTo().alert().accept();
    }
}</font>
上面是一个最简单的例子,打开一个浏览器,然后弹层一个alert框。注意这里的driver要被强制转换成JavascriptExecutor。
下面演示在打开51.com首页如何得到帐号输入框中显示的字符,并打印输出。
CODE:
<font size="4"><div class='input_wrap'>
<input id="passport_51_user" type="test" value="" tabindex="1" title="用户名/彩虹号/邮箱" name="passport_51_user" style="color:rgb(0,0,0);">
</div></font>
CODE:
<font size="4">package com.test;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test_JsExecutor {
    public static void main(String[] args) {
      String url = "http://www.51.com";
         
      //打开chrome
      WebDriver dr = new ChromeDriver();
      String js = "var user_input = document.getElementByIdx_x_x_x(\"passport_51_user\").title;return user_input;";
      String title = (String)((JavascriptExecutor)dr).executeScript(js);
      System.out.println(title);

      dr.quit();
    }
}</font>
输出结果为:
CODE:
<font size="4">用户名/彩虹号/邮箱</font>
其他用例:
CODE:
<font size="4">JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("(function(){
                              inventoryGridMgr.setTableFieldValue('"+ inventoryId + "','" + fieldName + "','"+ value + "');
                            }
                  )()"
                );</font>

巴黎的灯光下 发表于 2017-7-14 15:12:50

给楼主点赞
页: [1]
查看完整版本: 【转帖】WebDriver拾级而上(13) – 调用Java Script