Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Selenium webdriver 根据testng.XML中提供的参数调用不同的classed 我有一个关于testng模块的查询。我的要求是根据testng.xml中提供的参数调用不同的类 Testng.XML_Selenium Webdriver_Testng_Testng Dataprovider - Fatal编程技术网

Selenium webdriver 根据testng.XML中提供的参数调用不同的classed 我有一个关于testng模块的查询。我的要求是根据testng.xml中提供的参数调用不同的类 Testng.XML

Selenium webdriver 根据testng.XML中提供的参数调用不同的classed 我有一个关于testng模块的查询。我的要求是根据testng.xml中提供的参数调用不同的类 Testng.XML,selenium-webdriver,testng,testng-dataprovider,Selenium Webdriver,Testng,Testng Dataprovider,1) 在上面的代码片段中,如果我的测试类型是sanity,我想调用sanity.java文件,其中,如果其他测试类型是regression,我想调用regression.java 2) 我们可以将参数值作为输入传递给testng.XML中的其他XML标记吗 示例:如果 然后我希望这个值根据参数值动态反馈 3) 还从这个参数输入如何调用并行浏览器测试 1) 在上面的代码片段中,如果我的测试类型是sanity,我想调用sanity.java文件,其中,如果其他测试类型是regression,我想调用

1) 在上面的代码片段中,如果我的测试类型是sanity,我想调用sanity.java文件,其中,如果其他测试类型是regression,我想调用regression.java

2) 我们可以将参数值作为输入传递给testng.XML中的其他XML标记吗 示例:如果 然后我希望这个值根据参数值动态反馈

3) 还从这个参数输入如何调用并行浏览器测试

1) 在上面的代码片段中,如果我的测试类型是sanity,我想调用sanity.java文件,其中,如果其他测试类型是regression,我想调用regression.java

TestNG为您提供了一个名为的概念,它将为您解决这个问题。对于每个
@Test
方法,向其添加
groups
属性,然后在套件xml文件中,您可以选择要运行的组。有关更多信息,请参阅官方文档

2) 我们可以将参数值作为输入传递给testng.XML中的其他XML标记吗示例:如果我希望根据参数值动态地反馈该值

不确定您在这里要做什么,但testng套件xml文件中的参数本质上始终是静态的。除非并且直到您更改套件xml文件(或者)使用TestNG侦听器(如
org.TestNG.IAlterSuiteListener
),否则无法更改它们,在该侦听器中,您根据其他内容篡改参数。这是一个例子,说明了我所说的

期望注入参数的测试类

package com.rationaliemotions.stackoverflow.qn46216357;
导入org.testng.annotations.Parameters;
导入org.testng.annotations.Test;
公共类SampleTestClass{
@试验
@参数(“名称”)
公共void testMethod(字符串名称){
System.err.println(“Hello”+name);
}
}
此侦听器查找以
JVM\uujvm
开头的JVM参数,其名称与套件xml中的参数匹配,如果找到,则使用JVM参数中发送的内容更新参数值。因此,通过这种方式,你可以真正实现你的目标

package com.rationaliemotions.stackoverflow.qn46216357;
导入org.testng.IAlterSuiteListener;
导入org.testng.xml.XmlSuite;
导入java.util.List;
导入java.util.Map;
公共类参数changerListener实现IAlterSuiteListener{
@凌驾
公共无效更改(列表套件){
XmlSuite=suites.get(0);
对于(Map.Entry-each:suite.getParameters().entrySet()){
//检查是否给我们提供了任何前缀为“JVM_”的JVM参数
//通过参数名称的文本。
字符串sysValue=System.getProperty(“jvm_”+each.getKey());
if(sysValue!=null&&!sysValue.trim().isEmpty()){
每个.setValue(sysValue);
}
}
}
}
下面是套件xml的外观


如您所见,我为参数name定义了一个值Unknown

因此,如果您只需右键单击套件xml并从您喜爱的IDE运行它,则输出如下所示:

I have a query regarding testng module. My requirement is to invoke different classes based on the parameter provided in the testng.xml

Testng.XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<parameter name="selenium.test" value="Web" />
  <parameter name="selenium.testtype" value="Sanity" />
  <parameter name="selenium.env" value="UAT" />
  <parameter name="selenium.browser" value="IE" />
  <parameter name="selenium.pbrowser" value="Mozilla" />

  <test name =>
    <classes>
      <class name="test.DriverTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->
但是,如果您通过传入JVM参数
-Djvm_name
来运行相同的套件,那么输出将不同。这是一个运行输出,其中我以Rambo的形式传递值:
-Djvm\u name=Rambo

...
... TestNG 6.12 by Cédric Beust (cedric@beust.com)
...
Hello Unknown
PASSED: testMethod("Unknown")

===============================================
    46216357_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
46216357_Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
3) 还从这个参数输入如何调用并行浏览器测试

我将对此稍作修改,并建议您将并行模式作为JVM参数阅读,并在此基础上更改并行执行策略。 您基本上使用了与我在上面分享的
IAlterSuiteListener
实现相同的实现,它可能如下所示:

import org.testng.IAlterSuiteListener;
导入org.testng.xml.XmlSuite;
导入java.util.List;
公共类ParallelExecutorSetter实现IAlterSuiteListener{
@凌驾
公共无效更改(列表套件){
XmlSuite=suites.get(0);
字符串parallelMode=System.getProperty(“parallelMode”);
XmlSuite.ParallelMode mode=XmlSuite.ParallelMode.getValidParallel(ParallelMode);
如果(模式!=null){
setParallel(模式);
}
}
}
因此,您现在可以通过JVM参数来更改并行模式。例如,
-DparallelMode=methods
parallel

中运行所有
@Test
方法,请参见:SO的期望是,用户提出问题时不仅要进行研究以回答他们自己的问题,还要共享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另见:
...
... TestNG 6.12 by Cédric Beust (cedric@beust.com)
...
Hello Rambo
PASSED: testMethod("Rambo")

===============================================
    46216357_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
46216357_Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================