Appium scalatest 测试框架中关于 selenium/appium 的 dsl 封装使用演示

思寒_seveniruby · 2015年10月15日 · 最后由 思寒_seveniruby 回复于 2016年08月16日 · 2475 次阅读

最近开始转 scala 了, 所以就探索了下 scala 的生态. 无意间发现了这样的一个小框架.

http://www.scalatest.org/user_guide/using_selenium

class BlogSpec extends FlatSpec with ShouldMatchers with WebBrowser {

  implicit val webDriver: WebDriver = new HtmlUnitDriver
  val host = "http://localhost:9000/"
  "The blog app home page" should "have the correct title" in {
    go to (host + "index.html")
    pageTitle should be ("Awesome Blog")
    click on id("q")   // to lookup by id "q" 
    click on name("q") // to lookup by name "q" 
    click on linkText("click here!")
    textArea("body").value = "I saw something cool today!"
    textArea("body").value should be ("I saw something cool today!")
  }
}

然后就想是否可以用于 appium 那, 因为都是封装的 webdriver 协议. 于是就实验了下


class AppiumDsl extends FunSuite with ShouldMatchers with WebBrowser with BeforeAndAfterAll{
  val capabilities = new DesiredCapabilities();
  capabilities.setCapability("deviceName","emulator-5554");
  capabilities.setCapability("platformVersion", "4.4");
  capabilities.setCapability("appPackage", "com.xueqiu.android");
  capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.xueqiu.android.view.WelcomeActivityAlias")
  capabilities.setCapability("autoLaunch", "true")
  capabilities.setCapability("automationName", "Selendroid")
  capabilities.setCapability(MobileCapabilityType.APP, "/Users/seveniruby/Downloads/xueqiu.apk")
  implicit val driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities)
  //隐式等待设置并不起作用. 这个好像是appium的bug
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS)
  PageFactory.initElements(new AppiumFieldDecorator(driver, 10, TimeUnit.SECONDS), this)
  implicitlyWait(Span(10, Seconds))

   test("login xueqiu with dsl"){
    implicitlyWait(Span(10, Seconds))
    click on id("account")
    driver.getKeyboard.sendKeys("156005***")
    click on id("password")
    driver.getKeyboard.sendKeys("*******")
    click on id("button_next")
    click on id("tip_step_one")
    click on id("tip_step_two")
    click on id("tip_step_three")
  }
}

结果发现可以跑在 appium 上. 效果还不错, 就分享下.

不过遗憾的发现好像 selendroid 的 implicitlyWait 并不起作用. 这个好像是 appium 的 bug.
除了这个其他的操作还是挺优雅的.
因为 scala 也是 jvm 体系的. 所以如果把 scala 打包为一个标准的可执行文件. 那么就跟 robotframework 的 appiumlibrary 基本一样简单好用了.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

你在雪球吗?上次听雪球的晓光也说起了 Scala。
Scala 很火啊,最近看了 Twitter 的工具 Diffy 也是基于 Scala 的。

我也要学~求带

#1 楼 @newbee 恩. 我们也正在应用 twitter 的 diffy. 晓光是我领导.

#3 楼 @seveniruby 看来雪球的测试组合很强大啊

#1 楼 @newbee scala 并不火. 最后还会是小众的命. 没有 ruby 更适合测试领域. 但是贴近国内庞大的 jvm 生态. 方便和研发协作.

#2 楼 @doctorq 我也在采坑, 用法偏学术, 高能的技术不太好掌握, 国内的文档也很少. 建议你慎入

最近也在用 scala 基于 gatling 做一些集成到 jenkins 的性能测试,挺好用的。

8楼 已删除
思寒_seveniruby [该话题已被删除] 中提及了此贴 08月16日 01:48
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册