驱动Selenium的配置文件

时间:2016-09-17 08:03:18

标签: php selenium selenium-webdriver

我有大约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),我可以将其作为一组说明提供给驱动程序,以供其遵循?

3 个答案:

答案 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>