使用behat for angularjs应用程序的xpath问题

问题描述 投票:0回答:1

我一直在尝试为我工作的公司制作一个网络爬虫,以便结合使用mink扩展。我过去做过类似的事情,但不同的是,现在我试图抓取的页面是在angularjs中构建的。

这似乎在我的xpath选择器中导致一个问题,它无法找到我在DOM中请求的元素。

为了确保我有正确的xpath并仔细检查它我也使用chrome(扩展名)的Xpath Helper

我尝试使用的功能是:

/**
 * @Then I login
 */
public function login()
{
    $page = $this->getSession()->getPage();

    $username = $page->find('xpath', "//*[@id='inputEmail']/self::INPUT");
    $password = $page->find('xpath', "//*[@id='inputPassword']/self::INPUT");

    if ($username == null && $password == null) {
       echo "nothing found";
    }
    else{
        $username->setValue('username');
        $password->setValue('password');
    }
}

在我的.feature文件中,我能够访问登录页面,并通过“看到”dom中的一些文本来检查我在那里验证它是否正常工作,但是当我尝试填写上面字段中的值时,我收到错误。

我想这是一个角度问题,它创建DOM元素的方式导致我的xpath无法找到我需要的字段,但我想不出为这个工作。

当然使用像Protractor这样的JS框架可以是一个解决方案,但我想留在PHP中,因为它更容易维护我正在使用的团队。

任何想法都会受到欢迎。

php xpath behat mink
1个回答
0
投票

几点想法:

  1. 使用页面对象清理代码
  2. 在使用它之前确保元素存在,等待它(find()可以返回null或元素)
  3. 如果你不需要UI使用guzzle或使用一些无头驱动程序
  4. 如果您正在使用UI,请尝试创建特定于角度的等待条件
© www.soinside.com 2019 - 2024. All rights reserved.