我是Behat的新手,并使用php facebook / webriver扩展程序通过Selenium合并页面对象。我已经使用selenium webdriver使用Java / testNG使用页面对象模型来过去自动化Web应用程序,但是使用Behat和php设置我只是遇到了问题。
所以我想做的不是使用带有貂皮的selenium2driver,我想在我的项目中使用类似于这种格式的facebook / webdriver:
getMatchesPicksList(matches, getStringEnumValues(EndType));
我希望所有页面都有自己的类,并且能够从FeatureContext.php文件中调用每个页面;所以我可以保持它尽可能干净。
我的作曲家看起来像这样:
Project
|-bin(folder)
|-features(folder)
--NewFeature.Feature
|--bootstrap(folder)
--FeatureContext.php
|--Page(folder)
---HomePage.php
---RegistrationPage.php
|-vendor
和我的behat.yml类似于这个
"require": {
"facebook/webdriver": "~1.0",
"behat/behat": "3.4.2",
"behat/mink-goutte-driver" : "*",
"behat/mink-selenium2-driver": "1.3.1",
"sensiolabs/behat-page-object-extension": "^2.0",
"behat/mink": "1.7.1"
},
"config": {
"bin-dir": "bin/"
},
我不确定是否可以使用页面对象扩展程序在页面内启动webdriver(或只是导航到页面),我可以让firefox启动通过selenium-server-standalone-3.8.1.jar,但我不确定如何正确实现页面文件,因此它会读取。
Featurecontext文件:
default:
extensions:
SensioLabs\Behat\PageObjectExtension: ~
Behat\MinkExtension:
base_url: https://myurl.com
selenium2:
wd_host: localhost:4444/wd/hub
HomePage文件设置:
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Page\Homepage;
/**
* Defines application features from the specific context.
*/
class FeatureContext implements Context
{
private $homepage;
/**
* Initializes context.
*
* Every scenario gets its own context instance.
* You can also pass arbitrary arguments to the
* context constructor through behat.yml.
*/
public function __construct(Homepage $homepage)
{
$this->homepage = $homepage;
}
/**
* @Given \/^(?:|I )visited homepage$\/
*/
public function iVisitedHomepage()
{
$this->homepage->navigateToSite();
}
}
我不确定我是否在正确的轨道上,或者我是否应该创建一个单独设置驱动程序的新BasePage类?以及如何格式化behat.yml以便它能够正确查找文件?
答案 0 :(得分:0)
据我所知,使用Mink扩展实际上是在使用PHP Facebook \ WebDriver的分支。
如果查看Vendor文件夹,应该会看到一个“ instalclick”文件夹,其中包含MinkExtension使用的“ WebDriver”。
当您在config.yaml中告诉behat使用“ Behat \ MinkExtension:”时,将在behat上下文基础“ instalclick”而非实际“ Facebook \ WebDriver \”的基础中创建驱动程序并可用。
我从未使用过'SensioLabs \ Behat \ PageObjectExtension',但是我的假设是水貂会话的一个实例,驱动程序自动可用(它们在基类中初始化)。因此,您只需启动并编写类实现的代码。