【问题标题】:testng.xml with cross browsertestng.xml 与跨浏览器
【发布时间】:2018-05-21 06:42:56
【问题描述】:

我在 selenium java 中使用带有 xml 文件的 testNg 启动浏览器时遇到一些问题。当没有“driver = new ChromeDriver();”时,代码似乎工作得很好涉及到我正在附上我目前拥有的所有东西

所以她是我的班级档案

package corssBrowsers;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class VerifyTitle {

WebDriver driver;

@Test(priority=1)
public void sam() {
    System.out.println("Hello sam");
}

@Test(priority = 2)
@Parameters({"browser"})
public void browsers(String browsername) {

    System.out.println(browsername);

    if(browsername.equalsIgnoreCase("chrome")) {
        System.out.println("You have selected " + browsername);

        System.setProperty("webdriver.chrome.driver",
                System.getProperty("user.dir") + "\\Drivers\\Windows\\chromedriver.exe");

        driver = new ChromeDriver();

    }
    else {
        System.out.println("You have not selected chrome");
    }

    driver.manage().window().maximize();
    driver.get("www.yahoo.com");
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

}


}

而我的testng.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">



<test name="Test">

<parameter name="browser" value="chrome"/>

<classes>
<class name="corssBrowsers.VerifyTitle"/>
</classes>

</test> <!-- Test -->
</suite> <!-- Suite -->

当我运行测试表单时,我不断得到 xml:

[RemoteTestNG] detected TestNG version 6.14.2
Hello sam
chrome
You have selected chrome
Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91) 
on port 13932
Only local connections are allowed.

===============================================
Suite
Total tests run: 2, Failures: 1, Skips: 0
===============================================

当我从类文件中运行时,我得到:

PASSED: sam
FAILED: browsers
org.testng.TestNGException: 
Parameter 'browser' is required by @Test on method browsers but has not been 
marked @Optional or defined

在这两种情况下,即使代码正确,chrome 浏览器也不会启动(在我所做的其他测试中运行良好)。那么,我做错了什么?

【问题讨论】:

  • 您使用的是最新的 chromedriver.exe 还是最新的 selenium jars?提供您遇到的异常

标签: selenium testng selenium-chromedriver


【解决方案1】:

browsers方法有参数,这个参数是在TestNG XML中定义的。所以,如果你在类级别运行测试,那么系统将无法获取浏览器名称并会抛出错误.您可以在参数中添加可选标签,如果在testng xml中没有指定值或者如果您在类级别运行,则可选注释值将被视为默认值。

您需要修改如下代码

public void browsers(@Optional("chrome") String browsername) {

    System.out.println(browsername);

【讨论】:

    【解决方案2】:

    必须给browsername参数加上默认值,大家一起想想。 您在浏览器的 xml 运行程序文件中添加了一个参数,当您运行该文件时,该参数将传递给您声明 @Parameters 的 @Test。 现在,如果您自己运行测试类,则该值不会从 xml 文件传递​​给 @Test,因为没有启动您需要作为 TestNG 运行程序运行的文件。

    请添加这样的默认值作为参数:

    @Test(priority = 2)
    @Parameters({"browser"})
    public void browsers(@Optional("chrome") String browsername){
    
    System.out.println(browsername);
    
    if(browsername.equalsIgnoreCase("chrome")) {
        System.out.println("You have selected " + browsername);
    
        System.setProperty("webdriver.chrome.driver",
                System.getProperty("user.dir") + "\\Drivers\\Windows\\chromedriver.exe");
    
        driver = new ChromeDriver();
    
    }
    else {
        System.out.println("You have not selected chrome");
    }
    
    driver.manage().window().maximize();
    driver.get("www.yahoo.com");
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

    }

    最后一点,尝试使用 TestNG 注释进行设置配置。我建议使用@BeforClass 来创建驱动程序。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 2011-11-15
      • 2011-06-08
      • 2011-03-03
      • 2012-09-30
      • 2013-05-12
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多