Jmeter系列-webdriver代码范例

范例

WDS.sampleResult.sampleStart()
try{
//打开博客首页
WDS.browser.get('http://xqtesting.blog.51cto.com')
//测试代码结束
WDS.sampleResult.sampleEnd()
}catch(x){
WDS.sampleResult.sampleEnd()
//设置为结果失败
WDS.sampleResult.setSuccessful(false)
//返回信息设置为-_- sorry
WDS.sampleResult.setResponseMessage('-_- sorry')
}

以上是最简单的使用,算是一个尝鲜吧,其中WebDriver Sampler中代码编写可以扩展,和你编写WebDriver一样,可以利用By.id,By.cssSelector等方法进行元素的定位并操作,类似如下代码:

var pkg = JavaImporter(org.openqa.selenium)
WDS.browser.findElement(pkg.By.id('what')).sendKeys(['xiaoqiang'])
 try {

     var pkg = JavaImporter(org.openqa.selenium, org.openqa.selenium.support.ui)
     WDS.log.info('WDS Name:' + WDS.name)
     WDS.sampleResult.sampleStart()

     WDS.browser.navigate().to('https://app2.hoau.com:8423/cas2')
     WDS.log.info('Browser Title:' + WDS.browser.getTitle())
     WDS.log.info('Browser CurrentUrl:' + WDS.browser.getCurrentUrl())    
     WDS.log.info('Cookie:' + WDS.browser.manage().getCookies())   
     WDS.log.info('Request Header: ' + WDS.sampleResult.getRequestHeaders())

     var what = WDS.browser.findElement(pkg.By.id('username'))
     what.sendKeys(['test01'])
     var where = WDS.browser.findElement(pkg.By.id('password'))
     where.sendKeys(['psw01'])


     //   var button = WDS.browser.findElement(pkg.By.cssSelector('.btn-submit'))
     var button = WDS.browser.findElement(pkg.By.xpath("//input[@type='submit']"))
     button.click()


     var wait = new pkg.WebDriverWait(WDS.browser, 10)
     wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("//a[@title='Click here to log out']")))
     var results = WDS.browser.findElements(pkg.By.xpath("//a[@title='Click here to log out']"))
     WDS.log.info('Result: ' + results)

     if(results.empty) {
         WDS.sampleResult.successful = false
         WDS.sampleResult.responseMessage = 'There were no results returned'
     }

     var iter = results.iterator()
     var element = iter.next()
     WDS.log.info('User: ' + element.getText())

     if('test01' != element.getText()) {
         WDS.sampleResult.successful = false
         WDS.sampleResult.responseMessage = 'Login Failure'
     }

     WDS.sampleResult.sampleEnd()
 } catch(ex) {
     WDS.log.error(ex)
     WDS.sampleResult.successful = false
     WDS.sampleResult.responseMessage = 'There were no results returned'
     WDS.sampleResult.sampleEnd()
 }

扩展

为了解WDS 在JMeterUI下javascript脚本的能力,以及涉及到面问题相关的源码。

  • WDS (JMeterPlugins-WebDriver.jar)
com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler
com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverScriptable

  package com.googlecode.jmeter.plugins.webdriver.sampler;

  import org.apache.jmeter.samplers.SampleResult;
  import org.apache.log.Logger;
  import org.openqa.selenium.WebDriver;

  public final class WebDriverScriptable
  {
    private static final String[] EMPTY_ARGS = new String[0];
    private String name;
    private String parameters;
    private Logger log;
    private WebDriver browser;
    private SampleResult sampleResult;

    public void setName(String name)
    {
      this.name = name;
    }

    public String getName() {
      return this.name;
    }

    public void setParameters(String parameters) {
      this.parameters = parameters;
    }

    public String getParameters() {
      return this.parameters;
    }

    public String[] getArgs() {
      return this.parameters != null ? this.parameters.trim().replaceAll("\s+", " ").split(" ") : EMPTY_ARGS;
    }

    public void setLog(Logger log) {
      this.log = log;
    }

    public Logger getLog() {
      return this.log;
    }

    public void setBrowser(WebDriver browser) {
      this.browser = browser;
    }

    public WebDriver getBrowser() {
      return this.browser;
    }

    public void setSampleResult(SampleResult sampleResult) {
      this.sampleResult = sampleResult;
    }

    public SampleResult getSampleResult() {
      return this.sampleResult;
    }
  }   
  • WDS.browser (WebDriver - selenium-api-2.47.0.jar)
org.openqa.selenium.WebDriver
org.openqa.selenium.Cookie

package org.openqa.selenium;

import java.net.URL;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.logging.Logs;

public abstract interface WebDriver extends SearchContext
{
  public abstract void get(String paramString);

  public abstract String getCurrentUrl();

  public abstract String getTitle();

  public abstract List<WebElement> findElements(By paramBy);

  public abstract WebElement findElement(By paramBy);

  public abstract String getPageSource();

  public abstract void close();

  public abstract void quit();

  public abstract Set<String> getWindowHandles();

  public abstract String getWindowHandle();

  public abstract TargetLocator switchTo();

  public abstract Navigation navigate();

  public abstract Options manage();

  @Beta
  public static abstract interface Window
  {
    public abstract void setSize(Dimension paramDimension);

    public abstract void setPosition(Point paramPoint);

    public abstract Dimension getSize();

    public abstract Point getPosition();

    public abstract void maximize();
  }

  public static abstract interface ImeHandler
  {
    public abstract List<String> getAvailableEngines();

    public abstract String getActiveEngine();

    public abstract boolean isActivated();

    public abstract void deactivate();

    public abstract void activateEngine(String paramString);
  }

  public static abstract interface Navigation
  {
    public abstract void back();

    public abstract void forward();

    public abstract void to(String paramString);

    public abstract void to(URL paramURL);

    public abstract void refresh();
  }

  public static abstract interface TargetLocator
  {
    public abstract WebDriver frame(int paramInt);

    public abstract WebDriver frame(String paramString);

    public abstract WebDriver frame(WebElement paramWebElement);

    public abstract WebDriver parentFrame();

    public abstract WebDriver window(String paramString);

    public abstract WebDriver defaultContent();

    public abstract WebElement activeElement();

    public abstract Alert alert();
  }

  public static abstract interface Timeouts
  {
    public abstract Timeouts implicitlyWait(long paramLong, TimeUnit paramTimeUnit);

    public abstract Timeouts setScriptTimeout(long paramLong, TimeUnit paramTimeUnit);

    public abstract Timeouts pageLoadTimeout(long paramLong, TimeUnit paramTimeUnit);
  }

  public static abstract interface Options
  {
    public abstract void addCookie(Cookie paramCookie);

    public abstract void deleteCookieNamed(String paramString);

    public abstract void deleteCookie(Cookie paramCookie);

    public abstract void deleteAllCookies();

    public abstract Set<Cookie> getCookies();

    public abstract Cookie getCookieNamed(String paramString);

    public abstract WebDriver.Timeouts timeouts();

    public abstract WebDriver.ImeHandler ime();

    @Beta
    public abstract WebDriver.Window window();

    @Beta
    public abstract Logs logs();
  }
} 

以上要注意内部静态类 Options里面提供的,对Cookie进行操作的API。

原文地址:https://www.cnblogs.com/zhuochong/p/10118741.html