Selenium和scalaTest错误

时间:2016-02-20 11:03:56

标签: scala selenium sbt scalatest

我有一个问题,

我试图按照本书的第5章" sbt in Action" 我有一个问题,我不明白什么是错的......

这是我的SeleniumSpec.scala

app.controller('mainCtrl', function($scope, dataService){
    $scope.test_button = function(){
       dataService.getData().then(function(data){ //success function
           $scope.test = data;
       },function(error){ //error function
           console.log(error);
       })
    }
});

当我执行测试时,我有这个错误:

package org.preownedkittens;

import org.scalatest._
import org.scalatest.matchers.ShouldMatchers
import org.scalatest.events._
import org.scalatest.selenium._
import org.openqa.selenium.WebDriver


import org.scalatest._
import org.scalatest.matchers.ShouldMatchers
import org.scalatest.events._
import org.scalatest.selenium._
import org.scalatest.junit._
import org.openqa.selenium.WebDriver

class SeleniumSpec extends FlatSpec with ShouldMatchers with BeforeAndAfter with BeforeAndAfterAll with Chrome {
  val homePage: String = "http://localhost:9000"

  "Home page" should "redirect to kitten list" in {
    go to "http://localhost:9000"
    currentUrl should startWith ("http://localhost:9000/kittens")
  }

  it should "show three dropdown lists of attributes in sorted order" in {
    def select(name: String) = findAll(xpath("//select[@name='" + name + "']/option")).map { _.text }.toList
    def assertListCompleteAndIsSorted(list: Seq[String]) = {
      list.size should be(20)
      list.sorted should be(list)
    }

    go to homePage + "/kittens"

    assertListCompleteAndIsSorted(select("select1"))
    assertListCompleteAndIsSorted(select("select2"))
    assertListCompleteAndIsSorted(select("select3"))
  }

  private def purchaseForms() = findAll(xpath("//form/li/input[@id='purchase']/..")).map { _.text }.toList

  override def afterAll() {
    webDriver.quit()
  }
}

我更新了镀铬驱动器,(Chrome应用程序启动但在第二次关闭后出现错误)

2 个答案:

答案 0 :(得分:1)

首先,您的“首页”测试转到http://localhost:9000,但没有任何重定向(您的下一个测试中有一个),由于网址不匹配,您的currentUrl should startWith检查会正确失败。

您的“显示三个下拉列表”测试可能会失败,因为您是not waiting - 在go to homePage + "/kittens"请求之后 - 在页面完全加载之前(毫秒之后)您的XPath查询运行并返回匹配元素的数量。如果页面仅部分加载,则零是一个非常合理的结果。

可能最好的解决方案是确定应出现在相关页面上的另一个元素(可能是页脚?)并等待 it 出现:

WebDriverWait wait = new WebDriverWait(driver, 2000);  // 2 secs
wait.until(ExpectedConditions.presenceOfElementLocated(locator)); 

此时您可以假设页面已满载,并检查实际的下拉计数。

答案 1 :(得分:0)

你有一个没有启动的webdriver:

          System.setProperty("webdriver.chrome.driver", "bin\\chromedriver.exe")

    val dc = DesiredCapabilities.chrome()
    wd = new ChromeDriver(dc) // manage chrome through chromedriver
    //    wd.get(host)  or go to host
    //    wd.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS)
    //    wd.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS)