Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 某些测试未在TestNG中报告_Java_Eclipse_Selenium_Annotations_Testng - Fatal编程技术网

Java 某些测试未在TestNG中报告

Java 某些测试未在TestNG中报告,java,eclipse,selenium,annotations,testng,Java,Eclipse,Selenium,Annotations,Testng,我正在用Java在Eclipse中使用TestNG和Selenium。我有一个方法test,它调用其他方法来支持它需要执行的操作。我使用@test将它们标记为测试的一部分 @BeforeTest public void beforeTest() { driver.manage().window().maximize(); } @Test public static void checkValidity(String[] array, WebDriver driver){ Str

我正在用Java在Eclipse中使用TestNG和Selenium。我有一个方法
test
,它调用其他方法来支持它需要执行的操作。我使用
@test
将它们标记为测试的一部分

@BeforeTest
public void beforeTest() {
    driver.manage().window().maximize();
}

@Test
public static void checkValidity(String[] array, WebDriver driver){
    String partialURL = "";
    int brokenLinks = 0;
    for (int x=1; x<array.length; x+=2){
        partialURL = anonUserSitemapExperience.getPartialURL(driver, array[x]);
        if (partialURL.isEmpty()){
            System.err.println("The link \""+array[x]+"\" intended for the "+array[x-1]+" page is either broken or an external site.");
            brokenLinks++;
            brokenLinksTot++;
        }
        else{
            int found = anonUserSitemapExperience.findMatch(array, array.length, partialURL);
            if (found<1){
                System.err.println("A match was not found for "+array[x-1]+".\n"+array[x]+"\n"+partialURL);
                brokenLinks++;
                brokenLinksTot++;
            }
        }
    }
    System.err.println("\n"+brokenLinks+" broken link(s) was/were found.\n");
}

@Test
public static void openDropDowns(WebDriver driver){
    List<WebElement> dropdownArrows = driver.findElements(By.className("dropdownToggler"));
    Iterator<WebElement> itr = dropdownArrows.iterator();
    while(itr.hasNext()){
        try{
            itr.next().click();
        }
        catch(ElementNotVisibleException e){
        }
    }
}

@Test
public static String[] createArray(List<WebElement> list){
    String[] linkArray = new String[list.size()*2];
    int counter = 0;
    for (int x=1; x<linkArray.length; x+=2){
        linkArray[x] = list.get(counter).getAttribute("href");
        try{
            linkArray[x] = linkArray[x].replaceAll("%C2%AE", "®");
            linkArray[x] = linkArray[x].replaceAll("%20", " ");
            linkArray[x] = linkArray[x].replaceAll("%27", "'");
            linkArray[x] = linkArray[x].replaceAll("%C3%A4", "ä");
            linkArray[x] = linkArray[x].replaceAll("%C3%B6", "ö");
            linkArray[x] = linkArray[x].replaceAll("%C3%BC", "ü");
            linkArray[x] = linkArray[x].replaceAll("%C3%84", "Ä");
            linkArray[x] = linkArray[x].replaceAll("%C3%96", "Ö");
            linkArray[x] = linkArray[x].replaceAll("%C3%9C", "Ü");
            linkArray[x] = linkArray[x].replaceAll("%E2%80%93", "–");
            linkArray[x] = linkArray[x].replaceAll("%E2%84%A2", "™");
            linkArray[x] = linkArray[x].replaceAll("%25", "%");
            counter++;
        }
        catch(Exception e){
        }
    }
    int counter2 = 0;
    for (int x=0; x<linkArray.length; x+=2){
        linkArray[x] = list.get(counter2).getText();
        counter2++;
    }
    return linkArray;
}
    
@Test
public void test() {
    driver.get(siteUS);
    List<WebElement> topNavLinks = driver.findElement(By.className("topNavigationMenu")).findElements(By.className("menuLink"));
    int numLinks = topNavLinks.size();
    String[] topNavTitlesAndLinks = new String[numLinks*2];
    topNavTitlesAndLinks = createArray(topNavLinks);
    System.out.println("Filled titles and links array.");
    for (int x=1; x<topNavTitlesAndLinks.length; x+=2){
        driver.get(topNavTitlesAndLinks[x]);
        openDropDowns(driver);
        try{
            List<WebElement> menu = driver.findElement(By.className("asideNavigationMenu")).findElements(By.className("itemLink"));
            String[] menuArray = new String[menu.size()*2];
            menuArray = createArray(menu);
            checkValidity(menuArray, driver);
        }
        catch (Exception e){
            if (topNavTitlesAndLinks[x-1].contains("Endodontics")){
                WebElement element = driver.findElement(By.linkText("Endodontics"));
                Actions action = new Actions(driver);
                action.moveToElement(element).perform();
                WebElement subElement = driver.findElement(By.partialLinkText("Access"));
                action.moveToElement(subElement);
                action.click();
                action.perform();
                openDropDowns(driver);
                List<WebElement> menu = driver.findElement(By.className("asideNavigationMenu")).findElements(By.className("itemLink"));
                String[] menuArray = new String[menu.size()*2];
                menuArray = createArray(menu);
                checkValidity(menuArray, driver);
            }
        }
    }
}

@AfterTest
public void afterTest() {
    driver.close();
    driver.quit();
    
    System.err.println("\nTotal broken links found: "+brokenLinksTot);
    
    long time2 = System.currentTimeMillis();
    double timeMin =((double)(time2-time1)/60000);
    int timeMinTrunc = (int)timeMin;
    double timeSec = (timeMin%1)*60;
        
    System.out.println("\n\nAll tests finished in "+timeMinTrunc+" minutes and "+timeSec+" seconds.");
}
@BeforeTest
测试前公共无效(){
driver.manage().window().maximize();
}
@试验
公共静态无效检查有效性(字符串[]数组,WebDriver驱动程序){
字符串partialURL=“”;
int-brokenLinks=0;

对于(int x=1;x只有顶级的
@Test
才会报告结果。在我看来,checkValidity不是一个测试用例,它更多的是一个验证,会导致测试通过或失败。记住,
@Test
应该从头到尾都表示一个测试用例,一个场景。我应该能够查看
@Test
,并确切地知道什么是测试t您正在尝试完成。在您的示例中,您似乎正在尝试验证列表框中的条目。您的测试名称应该反映这一点,以及它的编写方式,第一次失败命中,测试将失败。如果您需要在失败之前先验证每个条目,那么您需要生成失败消息Approv在所有迭代/单击完成之前,不要抛出异常

  • TestNG忽略非void方法
  • 您不应该自己调用测试方法——这是TestNG的工作
  • 重写您的测试类,以便用
    @test
    注释的方法反映您的场景,并按顺序进行操作。然后,您可以使用所需的任何帮助器方法
  • 例如

    UPD

    如果要调用400次:

    @DataProvider(name = "400_links")
    public static String[][] getLinks() {
       // find your own way to create links here
       return new String[][] {{"http://foo"}, {"http://bar"}, ... , {"http://xyz"}};
    }
    
    @Test(dataProvider = "400_links")
    public void checkAllLinks(String link) {
       checkValidityOrWhatever(link);
    }
    
    public void checkValidityOrWhatever(String link) {
       //blah blah http ftw
    }
    

    如果在
    getLinks()中提供了400个链接,它将被启动400次
    每一次迭代都将由Testng报告。失败的迭代将不会阻止其他调用的启动。

    似乎这与Selenium或eclipse无关。将问题缩小一点如何。请看:我在程序中使用Selenium库和命令,所以我认为应该包括它。eclipse是我正在使用的IDE。这不是标记的工作方式吗?如果我做错了,很抱歉。请阅读链接!如果您将问题减少到最简单的复制步骤,您将发现唯一相关的东西将是Java和TestNG。其他一切都只是分散了对实际发生的事情的注意力。如果您知道一个事实,即:或者一些隐藏的Eclipse首选项正在影响此代码的运行方式,那么您知道的比我多,我将非常感谢您提供的信息,因为我正在尝试使此工作正常进行。您是否确实知道,只有TestNG和Java在这里运行才会产生此问题?如果是,您知道如何解决此问题?谢谢!您有任何建议吗如何设置格式以使每个checkValidity方法报告通过或失败?我试图避免整个测试用例失败,但拥有来自每个checkValidity的报告正是我要做的。我正在验证这些条目,正是。我该如何做才能不让测试用例失败,而是让checkValidity的迭代失败?我不知道“我不明白,System.err.println()是否会导致循环退出?如果是这样,请摆脱它,您有其他方法来记录结果,我建议改用apache的记录器。或者只写控制台。然后,检查BrokenLink是否>0,如果是,则测试失败。大多数人使用Assert.fail(),或其他一些断言方法来触发失败。不,它不会导致循环退出。这只是一个写入控制台操作。这不是我想要的功能。我想要
    checkValidity
    多次运行,每次运行,通过或失败,并在TestNG控制台中有反映这一点的输出。这是我无法获得的部分。我s
    Sysout
    用于让TestNG调用该方法的命令?不,它不是System.out.print()。那么,如果我不应该调用该方法,我如何让TestNG调用该方法?如果使用
    @Test
    或任何
    @Before\\\@After
    注释对方法进行注释,TestNG将调用该方法本身。如果您自己调用该方法,并且希望它被TestNG注意到,那么您做错了:)好的,那么你能想出什么方法来编写这个测试,使
    checkValidity
    方法在每次迭代时都报告,而不必一次又一次地复制和粘贴方法吗?我有400多个该方法的迭代要进行,并且希望每次都有一个报告。
    @DataProvider(name = "400_links")
    public static String[][] getLinks() {
       // find your own way to create links here
       return new String[][] {{"http://foo"}, {"http://bar"}, ... , {"http://xyz"}};
    }
    
    @Test(dataProvider = "400_links")
    public void checkAllLinks(String link) {
       checkValidityOrWhatever(link);
    }
    
    public void checkValidityOrWhatever(String link) {
       //blah blah http ftw
    }