zoukankan      html  css  js  c++  java
  • JS注入操作页面对象

    在用selenium webdriver 编写web页面的自动化测试代码时,有时对页面对象的操作需要通过js语句去执行,selenium本身就支持执行js,我们在代码中import org.openqa.selenium.JavascriptExecutor;就可以使用executeScriptexecuteAsyncScript这两个方法了,其中executeScript是同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕;executeAsyncScript方法是异步方法,它不会阻塞主线程执行。

    executeScript方法如果有返回值,有以下几种情况:

      • 如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
      • 如果返回浮点数字,这个方法就返回一个double类型的数字
      • 返回非浮点数字,方法返回Long类型数字
      • 返回boolean类型,方法返回Boolean类型
      • 如果返回一个数组,方法会返回一个List<Object>
      • 其他情况,返回一个字符串
      • 如果没有返回值,此方法就会返回null
    从javaScript代码中返回数据,我们需要使用return关键字。基于返回值的类型,我们需要对executeScript() 方法进行转型。对于带小数点的值,使用Double类型,非小数值可以使用Long类型,布尔值可以使用Boolean类型,如果返回的是HTML节点, 可以使用 WebElement类型,文本值,可以使用String类型。如果返回的是对象列表,基于对象类型的任何值都可以。

    为了验证写的js代码是否正确,需要首先对其验证,然后加入到脚本里去执行。firebug的console模块就提供了这样的一个调试功能,打开firebug,切换到console页面,在右边就可以输入js脚本,点击run就可以调试了。
    例子:
    1,打开baidu,
    2,随便输入搜索内容
    3,用firebug识别到“百度一下‘按钮
    4,在右边输入js代码,document.getElementById("su").click();
      或var s=document.getElementById('load');
      s.click()
    5,点击run,你会发现js脚本触发了”百度一下“按钮,进行搜索动作。
     

     在webdriver脚本中的使用形式:

    WebDriver driver = new FirefoxDriver(); 

    JavascriptExecutor jse = (JavascriptExecutor)driver; 

    1. 直接操作元素

    jse.executeScript("window.document.getElementById('jingshou').click()");
     
    2、传入element当着参数然后操作

    WebElement element = driver.findElement(By.id("jingshou"));  

    jse.executeScript("arguments[0].click();", element);  也可以写成这样jse.executeScript("arguments[0].onclick=function(){alert('This is my alert!');}", element) 

    你也可以传入多个参数,使用arguments[]下标来指定你要使用的参数,记住下标是从0开始的

     
    代码展示:
    WebDriver driver = new FirefoxDriver();
            try
            {
                driver.get("http://www.baidu.com");
                //利用webdriver键入搜索关键字
                //driver.findElement(By.id("kw")).sendKeys("yeetrack");
                //利用js代码键入搜索关键字
                ((JavascriptExecutor)driver).executeScript("document.getElementById("kw").value="yeetrack"");
                //利用js代码取出关键字
                String keyword = (String) ((JavascriptExecutor)driver).executeScript("var input = document.getElementById("kw").value;return input");
                System.out.println(keyword);
                driver.findElement(By.id("su")).click();
                TimeUnit.SECONDS.sleep(5);
             }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally
            {
                driver.quit();
            }

    但是目前好像不支持document.getElementByXpath()方法去操作对象。或许是没有研究透,需要更深入的了解。下期文章再更新。
  • 相关阅读:
    9.5---所有字符串的排列组合(CC150)
    9.4---集合子集(CC150)
    9.3---魔术索引(CC150)
    5.3(2)----机器人走方格2(CC150)
    9.2---机器人走方格(CC150)
    9.1---上楼梯(CC150)
    5.3---找最近的两个数(CC150)
    5.8---像素设定(CC150)
    7.4---加法替代运算(CC150)
    4.9---二叉树路径和(CC150)
  • 原文地址:https://www.cnblogs.com/jingwei/p/4717624.html
Copyright © 2011-2022 走看看