在 Play 框架规范中设置 PhantomJSDriver 上的 Accept-Language

2024-05-02

如何使用 Play Framework 2.2 规范中的特定 Accept-Language 语言标头配置 PhantomJSDriver?

鉴于此代码:

import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
import play.api.i18n._
import play.api.test._
import play.api.test.Helpers._
import org.openqa.selenium.phantomjs.PhantomJSDriver

@RunWith(classOf[JUnitRunner])
class IntegrationSpec extends Specification {

  "Application" should {

    "work from within a browser" in new WithBrowser(webDriver = classOf[PhantomJSDriver]) {
      browser.goTo("http://localhost:" + port)
      implicit val lang = Lang("pt-BR")
      val expected = Messages("home.index.featured_lead")
      browser.pageSource must contain(expected)
    }
  }
}

我怎样才能确保生成的请求goTO将与特定的Accept-Language标头,例如pt-BR?

Update:该问题的目标是能够在模拟浏览器(例如 PhantomJS)中运行测试,并为特定语言配置浏览器。上面的代码示例只是要求浏览器检测页面中是否有一些本地化文本,但是可以在模拟浏览器中运行的测试类型有很大差异。例如,文本可以在运行时通过 JavaScript 设置。或者我可能想截取屏幕截图并将其与之前的参考屏幕截图进行比较,以测试布局。默认情况下,显然浏览器正在使用计算机的区域设置,这会破坏持续集成测试。所以问题是如何从 Play Framework 测试中配置 PhantomJS。


基于Yasuki Okumura 的论坛留言 https://groups.google.com/d/msg/play-framework/vjAhrsD753E/1g4V4saC48AJ,这可以通过创建一个来完成TestBrowser来自预配置驱动程序的对象。

例如:

In file WithPhantomJS.scala:

package com.myproject.website.tests

import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.phantomjs.PhantomJSDriver
import org.openqa.selenium.phantomjs.PhantomJSDriverService
import org.specs2.execute.AsResult
import org.specs2.execute.Result
import org.specs2.mutable.Around
import org.specs2.specification.Scope
import play.api.i18n.Lang
import play.api.test.Helpers._
import play.api.test.FakeApplication
import play.api.test.TestBrowser
import play.api.test.TestServer
import scala.collection.JavaConverters._

abstract class WithPhantomJS(val additionalOptions: Map[String, String] = Map()) extends Around with Scope {

  implicit def app = FakeApplication()

  implicit def port = play.api.test.Helpers.testServerPort

  lazy val browser: TestBrowser = {
    val defaultCapabilities = DesiredCapabilities.phantomjs
    val additionalCapabilities = new DesiredCapabilities(additionalOptions.asJava)
    val capabilities = new DesiredCapabilities(defaultCapabilities, additionalCapabilities)
    val driver = new PhantomJSDriver(capabilities)
    TestBrowser(driver, Some("http://localhost:" + port))
  }

  override def around[T: AsResult](body: => T): Result = {
    try {
      running(TestServer(port, app))(AsResult.effectively(body))
    } finally {
      browser.quit()
    }
  }
}

In file IntegrationSpec.scala:

package com.myproject.website.tests

import com.myproject.common.helpers._
import org.junit.runner._
import org.specs2.runner._
import play.api.i18n._
import play.api.test._
import play.api.test.Helpers._
import org.specs2.mutable.Specification
import org.openqa.selenium.phantomjs.PhantomJSDriverService

/**
 * An integration test will fire up a whole play application in a real (or headless) browser.
 */
@RunWith(classOf[JUnitRunner])
class IntegrationSpec extends Specification {

  val enUSLangCode = "en-US"
  val ptBRLangCode = "pt-BR"

  val enUSOptions = getPhantomJSLanguageOption(enUSLangCode)
  val ptBROptions = getPhantomJSLanguageOption(ptBRLangCode)

  "Application" should {

    "work from within a browser with en-US language" in new WithPhantomJS(enUSOptions) {
      browser.goTo("http://localhost:" + port)
      implicit val lang = Lang(enUSLangCode)
      val expected = Messages("home.index.featured_lead")
      browser.pageSource must contain(expected)
    }

    "work from within a browser with pt-BR language" in new WithPhantomJS(ptBROptions) {
      browser.goTo("http://localhost:" + port)
      implicit val lang = Lang(ptBRLangCode)
      val expected = Messages("home.index.featured_lead")
      browser.pageSource must contain(expected)
    }

  }

  private def getPhantomJSLanguageOption(langCode: String) =
    Map(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "Accept-Language" -> langCode)

}

此外,这种依赖关系是必需的build.sbt:

libraryDependencies += "com.github.detro.ghostdriver" % "phantomjsdriver" % "1.0.4" % "test"

在 Play Framework 2.3 中,WithBrowser class 会接受 https://github.com/playframework/playframework/blob/31afc82125ed75e25d1d1eda9ea9ae132ce98b7e/framework/src/play-test/src/main/scala/play/api/test/Specs.scala#L49 a WebDriver直接实例化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Play 框架规范中设置 PhantomJSDriver 上的 Accept-Language 的相关文章

  • 具有上限的联合类型

    我正在遵循这个问题的公认答案中提出的技术如何定义 类型析取 联合类型 https stackoverflow com questions 3508077 does scala have type disjunction union type
  • Selenium Webdriver - 单击多个下拉菜单时出现陈旧元素异常,而 HTML DOM 不会更改

    我尝试自动化一个场景 其中条件是我必须从下拉列表中选择一个选项 然后它旁边有另一个下拉列表 我必须单击下一个下拉列表中的一个选项才能启用按钮 我尝试使用代码 但它仅单击第一个选项 并显示错误为过时的元素引用 元素未附加到页面文档 请帮忙 如
  • 截取屏幕截图时出现异常 null 且配置失败:@AfterMethod 拆解

    从昨天开始我遇到了一些麻烦并且陷入困境 无法找出其原因 在这里尝试了答案的解决方案 我创建了 Test 其中包含用于登录和检查应用程序仪表板的代码示例 和 AfterMethod 当 Assert 为 false 时 应该捕获屏幕截图 如果
  • 如何在 Selenium WebDriver 中获取“ul”类的所有“li”元素

    我是 Selenium webdriver 的新手 我遇到了一个要求 我必须运行我的测试 单击一个部分中的所有链接 有人可以帮我解决这个问题的 Java 代码吗 附上一张显示该特定部分的萤火虫属性的图像 我已经尝试了下面的代码 但它返回了一
  • python + selenium webdriver:使用身份验证方法

    我正在使用 python selenium webdriver 来自动化检查 我被困在通过弹出窗口请求 http 身份验证的网站上 我试图通过以下代码使用 身份验证 方法 init driver webdriver Firefox driv
  • C# 如何单击 IList 中的 IWebelement?

    所以我尝试单击 YouTube 上的按钮 但我无法通过 Xpath 找到该按钮 因为按钮太多 所以我尝试将它们保存在 IList 中 现在我想单击列表中的特定按钮 ChromeDriver chrome new ChromeDriver L
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 无法实例化类型 AppiumDriver

    我在项目构建路径中添加了以下 jar java client 2 0 0 来自http appium io downloads html http appium io downloads html gt gt Appium 客户端库 gt
  • 执行页面的 javascript 后保存页面的 html 输出

    我正在尝试抓取一个网站 它首先加载 html js 使用js修改表单输入字段 然后使用POST 如何获得 POSTed 页面的最终 html 输出 我尝试使用 phantomjs 执行此操作 但它似乎只有渲染图像文件的选项 谷歌搜索表明这应
  • Scala Spark 包含与不包含

    我可以使用 contains 过滤 RDD 中的元组 如下所示 但是使用 不包含 来过滤 RDD 又如何呢 val rdd2 rdd1 filter x gt x 1 contains 我找不到这个的语法 假设这是可能的并且我没有使用Dat
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • 如何通过 javascript 和 ajax 调用 Scala 中的方法?

    我不知道我的标题是否有点误导 但这是我真正需要帮助的 我正在获取这个网址 get fb login fbEmail function data console log data 这是我的路线 GET fb login email prese
  • 如何执行仅匹配正则表达式的测试?

    在 sbt 0 10 1 中 我经常使用test only缩小我的测试数量 sbt gt test only com example MySpec 但是 我想缩小范围 以便只运行名称 描述与正则表达式匹配的测试 是否有一些语法可以实现这样的
  • Spark 2.2 无法将 df 写入 parquet

    我正在构建一个聚类算法 我需要存储模型以供将来加载 我有一个具有以下架构的数据框 val schema new StructType add StructField uniqueId LongType add StructField tim
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • Spark scala 模拟 Spark.implicits 用于单元测试

    当尝试使用 Spark 和 Scala 简化单元测试时 我使用 scala test 和mockito scala 以及mockito Sugar 这只是让你做这样的事情 val sparkSessionMock mock SparkSes
  • Java 拥有闭包后 Scala 的优势 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着 Java 中添加了闭包 作为语言选择 Scala 相对于 Java 的优势是什么 有人可以详细说明一下有什么优点吗 除了闭包 J
  • Selenium 中的断言和验证

    有人可以解释一下断言和验证之间的区别吗 我知道验证意味着它检查它是否存在 如果不存在 则测试失败并停止在那里 正确吗 那么 即使断言失败了 断言还会继续吗 我已经阅读了文档 但仍然无法理解它 不 你已经搞反了 在 Selenium IDE
  • 如何找到Selenium WebDriver的XPath? [复制]

    这个问题在这里已经有答案了 我想知道是否可以获取Web元素的XPATH test driver find elements by css selector div menu listes ul menu menu horizontal me
  • 无法摆脱脚本中的硬编码延迟

    我用 vba 结合 selenium 编写了一个脚本来解析网页中可用的所有公司名称 该网页启用了延迟加载方法 因此每个滚动中只有 20 个链接可见 如果我滚动 2 次 则可见链接数为 40 个 依此类推 该网页中有 1000 个可用链接 我

随机推荐