当 eclipse 尝试根据其 DTD 验证 XML 时,我总是在 TestNG XML 配置文件中的 test 标记(位于第 test name="Bing-Search-Sample... 行)中收到此错误。工作正常,似乎没有问题:
元素类型“test”的内容必须匹配 “(方法选择器?,参数*,组?,包?,类?)”。
XML 文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="tests" allow-return-values="true"
verbose="10">
<test name="Bing-Search-Sample-Test">
<classes>
<class name="package.TestFactory" />
</classes>
<groups>
<run>
<include name="sample-tests" />
</run>
</groups>
<parameter name="testInterfaceXML" value="SearchInterface.xml"></parameter>
<parameter name="testSuiteXML" value="SearchTest.xml"></parameter>
</test>
</suite>
由于 XML 工作正常,我想知道 TestNG DTD 或使用 eclipse 的 XML 文件验证是否存在问题。
显然元素的顺序很重要。首先是参数,然后是组,类应该是测试元素中的最后一个元素。这是配置文件的正确格式:
<suite name="tests" allow-return-values="true"
verbose="10">
<test name="Bing-Search-Sample-Test">
<parameter name="testInterfaceXML" value="SearchInterface.xml"></parameter>
<parameter name="testSuiteXML" value="SearchTest.xml"></parameter>
<groups>
<run>
<include name="sample-tests" />
</run>
</groups>
<classes>
<class name="package.TestFactory" />
</classes>
</test>
</suite>
只需更改第一行如下:
<?xml version="1.0" encoding="UTF-8"?>
删除此行:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
不会显示错误。
只需替换以下行:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
与:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-2.4.dtd">
它对我有用。
验证的一个常见用途是确保软件知道对输入的期望,从而保证每个有效文档都得到正确处理。 并不总是保证每个无效文档都会引发错误 - 有时(如此处)某些使用软件实际上可以处理一些无效文档。
您询问软件正确处理您的输入是否意味着 DTD 有问题。 不一定:定义严格的排序通常比允许排序中所有可能的变化更容易,特别是当元素的顺序不传达信息时。
另外,检查您的 testng.xml 格式是否正确,即其中没有不需要的字符。就我而言,我错误地将两个右括号放在一起并尝试执行 testng.xml。它会抛出同样的错误。
删除 DOCTYPE 整行
删除上面的行,它在 testng.xml 文件中没有给出任何错误;然而,即使文件包含错误,执行也不会受到阻碍。
如果不起作用,请尝试将文件内容替换为任何其他有效的 testng.xml 文件的内容。这对我的情况有效。