【问题标题】:Fitnesse wiki unable to call selenium method correctlyFitnesse wiki 无法正确调用 selenium 方法
【发布时间】:2018-02-17 17:45:10
【问题描述】:

我正在尝试编写一个简单的夹具来打开浏览器并导航到 www.google.com。当我运行 wiki 页面时,它以全绿色通过,但浏览器永远不会打开(我认为该方法甚至不会被 wiki 调用)。有人可以看看我的夹具和 wiki 看看我做错了什么吗?提前非常感谢,

这是维基 -

 !|SeleniumFitness|
  |URL                  |navigateToSite?|
  |http://www.google.com|               |

运行后-

!|SeleniumFitnesse| java.lang.NoSuchMethodError: org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(Lorg/openqa/selenium/remote/service/DriverService;Ljava/util/Map;)V
 |URL |The instance decisionTable_4.setURL. does not exist|navigateToSite? 
 |http://www.google.com|!The instance decisionTable_4.navigateToSite. does not exist |

这是夹具 -

package FitNesseConcept.fitNesse;

import java.util.Properties;

import org.junit.BeforeClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeMethod;

//import com.google.common.base.Preconditions.*;
//import com.google.common.collect.Lists;

import fit.ColumnFixture;

public class SeleniumFitnesse extends ColumnFixture {

public static ChromeDriver driver = null;
private String navigateToSite = "";
public String URL = "";



    public SeleniumFitnesse() {

    Properties props = System.getProperties();

    props.setProperty("webdriver.chrome.driver", "/home/ninad/eclipse-workspace/chromedriver");

    driver = new ChromeDriver();
    }



// SET-GET Methods

public String getURL() {
    return URL;
}

public void setURL(String uRL) {
    URL = uRL;
}

public String getNavigateToSite() {
    return navigateToSite;
}

public void setNavigateToSite(String navigateToSite) {
    this.navigateToSite = navigateToSite;
}

// Navigate to URL

public void navigateToSite() throws Throwable {
    System.out.println("Navigating to Website");

    try {
        driver.navigate().to(URL);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}



}

【问题讨论】:

  • 您编写自己的(又一个)Selenium FitNesse 集成的任何特殊原因?您是否查看了fitnesse.org/PlugIns#slimfixtures 的可用插件?
  • 你为什么要写一个Fit column fixture,你想创建某种形式的决策表吗?当我查看代码和 wiki 时,我无法完全理解您期望该表代表什么。当你想使用一个表来按顺序执行多个步骤(比如打开一个页面)时,我建议切换到 Slim 测试运行器并使用它的脚本表 (fitnesse.org/…)。您当前的代码使用了 jUnit BeforeMethod 注释,这在 FitNesse 上下文中并不意味着或做任何事情。
  • 感谢您的回复。我不知道 slimfixture 插件。你能一步一步告诉我如何将它们导入我的eclipse项目。是否像添加 maven 依赖一样简单?如果没有,罐子到底在哪里?非常感谢(仅供参考 - 我是初学者到中级,我已经习惯了 Cucumber,但我工作的公司想要健身)。
  • (警告:我有偏见,因为以下项目是我的)。我建议根据github.com/fhoeben/… 中描述的方法之一创建您自己的 FitNesse Maven 项目。这为您提供了一个 FitNesse 项目,您可以在其中使用“BrowserTest”夹具 (github.com/fhoeben/hsac-fitnesse-fixtures/wiki/…) 来执行 Selenium 测试。但是您不必使用整个设置,您也可以将其添加为 maven 项目(请参阅项目的发布),但是需要更多的手动配置

标签: selenium fitnesse fitnesse-slim selenium-fitnesse-bridge


【解决方案1】:

作为 cmets,您得到了一些很好的建议 - 但要直接回答您的问题,对于您编写的旧式 ColumnFixture,确实不会调用“navigateToSite”方法。

这些样式的灯具不再经常使用,Slim 是首选,您在其文档中的 Fitnesse 实例将向您展示如何使用 Slim 样式。但是,对于您编写的列夹具,如果您想要调用一个方法,它需要是“?”在标题行中跟随方法的名称。

请参阅柱夹具的基本文档: http://fitnesse.org/FitNesse.UserGuide.FixtureGallery.BasicFitFixtures.ColumnFixture

您误用了柱式夹具,即使授予旧样式。 Column Fixture 的模式是“这是一系列代表输入的列,现在这是我想要进行的方法调用以获取输出并检查结果”。浏览网站通常不符合这种模式。在老式的 Fitnesse 中,它可能会被 ActionFixture 处理:

http://fitnesse.org/FitNesse.UserGuide.FixtureGallery.BasicFitFixtures.ActionFixture

在较新的 Slim 样式中,一个非常适合导航和检查您所在位置的场景表。

http://www.fitnesse.org/FitNesse.UserGuide.WritingAcceptanceTests.SliM.ScenarioTable

一般来说,通过 wiki 进行 WebDriver / Selenium 测试值得额外考虑它是否是您的最佳媒介。 Fitnesse 旨在成为一种协作工具,用于直接针对源代码记录和验证业务需求。

这是一个如何使用 ColumnFixture 的示例,尽管 ColumnFixture 也不完全合适:

|url|navigateToUrl?|
|www.google.com| |

java class:
public String url;

public void navigateToUrl() {
}

如果导航正常,您可以返回“OK”,或者如果您愿意,可以返回页面标题而不是 void。

【讨论】:

  • 谢谢吉姆,我更改了我的 wiki 以反映您给我的“柱夹具的基本文档”链接 - !|SeleniumFitnesse| |网址 |导航到站点?| |google.com| 但我得到了 - 在 FitNesseConcept.fitNesse.SeleniumFitnesse 中找不到方法 navigateToSite[0]。有什么想法吗?
  • 是的 - 您在上述代码中的 navigateToSite 方法采用单个输入参数,即 URL - Fitnesse 正在尝试调用无参数方法。尝试在 wiki 上更改您的夹具以将 URL 作为单独的列传递,并在您的夹具类上为其创建一个公共属性。所以:|url|navigateToSite?| 和“公共字符串 url;”在你的灯具类上。从 navigateToSite 方法中删除输入参数,并改为引用 url 属性。
  • 嗨,吉姆,我做了您要求的更改。 Wiki 以全绿色通过,并在空列中返回 Void。我对我的原始问题进行了编辑,这样你就可以看到我做了什么。浏览器永远不会启动:(
  • 大声笑-进展顺利;-)。这可能现在涉及 webdriver 的东西,这是不同的追求。但是,您可能会尝试获取尝试启动浏览器的代码,并将其移动到另一个类 - 而不是在夹具中。然后从 Java Main 调用它并运行它 - 验证浏览器启动正常。一旦你有这个工作,那么你可以再次将它连接到健身装置。
  • 啊等等我可能看到了你的问题。您的 setupClass 方法上有一个单元测试框架注释。这不会被调用——fitnesse 对 testng 一无所知——你没有将它作为单元测试运行,因此注释什么也不做。 Fitnesse 将在夹具类上调用无参数构造函数,因此请尝试将设置代码放在夹具类的构造函数中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多