我有大约500个可能到特定页面的路径,我需要测试所有这些路径。该页面的每个路径看起来都与此类似(使用PHP Web驱动程序;通常有大约10个步骤):
// Navigate to form
$driver->get('http://www.domain.com');
$driver->get($driver->findElement(WebDriverBy::xpath("//a[contains(text(),'Foo 1')]"))->getAttribute('href'));
$driver->findElement(WebDriverBy::xpath("//div[@class='countryHeader']//a[contains(text(), 'Bar 1')]"))->click();
$driver->findElement(WebDriverBy::xpath("//form[@name='formDisclaimer']//input[contains(@class, 'button')]"))->click();
我不想为所有可能的页面路径的所有步骤编写代码。但是,我确实拥有数据库中步骤的所有相关细节(例如XPath,节点可能包含的字符串等)。
有没有办法让我动态地#34;生成某种配置文件(XML或JSON),我可以将其作为一组说明提供给驱动程序,以供其遵循?
答案 0 :(得分:4)
很长一段时间回到我的一个项目我有类似的要求。我试图创建一个机器人(或者有人可能会调用Web Crawler)。当我开始浏览页面时,我开始在电子表格中维护导航路径,因此我不必手动点击路径。一旦我有了路径,下次每当路径发生变化时,我都会收到通知,如果是有效的变更,那么在s / s中进行更改或将其作为错误提升。
答案 1 :(得分:1)
正如您所说,您在数据库中拥有所有相关详细信息,那么您只需阅读它并在foreach循环中传递给selenium驱动程序。
或者如果您不希望在测试中引用数据库,只需将数据转储到PHP数组并添加到测试类中。
您只需要编写一个逻辑来将您的sql数据转换为test。不需要手动编写每个测试。
我不知道您正在使用哪个测试框架,但是您可以从单个测试中执行许多测试,例如在PHPUnit中,可能是这样的:
class My_PathsTest extends PHPUnit_Framework_TestCase
{
public function setUp() {
// setup $this->tests here
}
public function testAll() {
// $this->tests would contain info about paths taken from database.
$failures = array();
foreach($this->tests as $paths_set) {
try {
/**
* $driver->get($paths_set['start_point']);
* foreach ($paths_set['paths'] as $path ) {
* $driver->findElement(WebDriverBy::xpath($path));
* }
*
* Important!!!
* If you didn't find something you expected
* just throw the PHPUnit_Framework_ExpectationFailedException exception
* throw new PHPUnit_Framework_ExpectationFailedException('Element missing add some info here about which is missing etc..');
*/
}
catch(PHPUnit_Framework_ExpectationFailedException $e) {
$failures[] = $e->getMessage();
}
}
if (!empty($failures)) {
throw new PHPUnit_Framework_ExpectationFailedException(count($failures) . " assertions failed:\n\t" . implode("\n\t", $failures));
}
}
}
答案 2 :(得分:1)
最好是从db获取数据,使用odbc作为列表(数组)xpath定位器,然后循环遍历它。 如果您无法直接访问数据库,请将查询结果导出为.csv文件(MS db有一个选项另存为,不确定其他文件),然后读取文件并循环遍历数组< / p>