Html 动态填充<;选择>;测试期间未使用Codeception填充

Html 动态填充<;选择>;测试期间未使用Codeception填充,html,forms,dom,selenium-webdriver,codeception,Html,Forms,Dom,Selenium Webdriver,Codeception,我对Codeception比较陌生,正在尝试使用它和Firefox的SeleniumWebDriver对表单进行验收测试。表单(可在上获得)主要由一个文本框和一个自动填充的表单组成,如果文本框中的输入导致多个匹配,则该表单将插入DOM中;每个字段也有一个提交按钮 我遇到的问题是,当在Firefox中正常测试时,其行为与预期一致,并且在初始文本搜索返回多个匹配的情况下自动填充(例如,输入任何布莱顿邮政编码,尽管特定场景是搜索“布莱顿市政厅,巴塞洛缪广场”,返回3个结果). 但是,当尝试通过Code

我对Codeception比较陌生,正在尝试使用它和Firefox的SeleniumWebDriver对表单进行验收测试。表单(可在上获得)主要由一个文本框和一个自动填充的表单组成,如果文本框中的输入导致多个匹配,则该表单将插入DOM中;每个字段也有一个提交按钮

我遇到的问题是,当在Firefox中正常测试时,其行为与预期一致,并且在初始文本搜索返回多个匹配的情况下自动填充(例如,输入任何布莱顿邮政编码,尽管特定场景是搜索“布莱顿市政厅,巴塞洛缪广场”,返回3个结果). 但是,当尝试通过Codeception进行测试(运行完整的测试或通过控制台尝试每个步骤)时,会将插入到DOM中,但似乎从未使用实际结果填充(它包含的唯一元素是“请选择您的地址…”)

我的测试步骤如下:

$I->amOnUrl('http://www.brighton-hove.gov.uk/content/parking-and-travel/parking/find-your-parking-zone');
$I->fillField('Enter your postcode or house number and street','Brighton Town Hall, Bartholomew Square');

// XPath is used here as the form elements' 'id's, 'class'es and 'name's are auto-generated (the one above just happens to have a label).
$I->click("//div[@id='achieveform']/form/div/div/div[1]/div[1]/div/div[3]/div/input[@type='submit' and @value='Search'])";

// I've also tried using 'submitForm(...)' here, rather than just clicking the button.

// Wait an unnecessarily long amount of time in the hope that the dropdown appears and is also populated...
$I->waitForElement("//div[@id='achieveform']/form/div/div/div[1]/div[1]/div/div[7]/div/div[3]/div/div[1]/span/select", 5);

// The first option is there...
$I->seeElementInDOM("//div[@id='achieveform']/form/div/div/div[1]/div[1]/div/div[7]/div/div[3]/div/div[1]/span/select/option[1]");

// ...but it doesn't have 4 options, as expected.
$I->seeNumberOfElements("//div[@id='achieveform']/form/div/div/div[1]/div[1]/div/div[7]/div/div[3]/div/div[1]/span/select/option", 4);

虽然我希望执行的测试本质上是黑盒测试,但我的下一步行动是尝试跟踪表单提交和DOM更新,即使不需要了解系统的底层结构。我是否忽略了一些简单的事情?任何指针都将不胜感激。

似乎您没有在搜索框的右字段或文本输入字段中填充值:

而不是:

$I->fillField('Enter your postcode or house number and street','Brighton Town Hall, Bartholomew Square');
$I->fillField('.dataelr input', "Your Value here");
使用:

$I->fillField('Enter your postcode or house number and street','Brighton Town Hall, Bartholomew Square');
$I->fillField('.dataelr input', "Your Value here");

希望能有所帮助。

抱歉,事实证明这与Codecepetion无关:问题部分与搜索表单背后的后端逻辑有关(它似乎不喜欢逗号)部分原因是我没有注意到,当在Codeception之外执行相同的操作时,实际上也会出现带有空下拉列表的行为


主持人:现在可以关闭/删除此线程(因为该问题在Codeception上下文中不是问题)。

嗨,Anirudh,谢谢你的回复。就我所见,下拉列表的出现意味着文本框中有有效的输入,尽管不明确。此外,即使问题与文本框的引用有关,代码状态
表单元素“id”、“class”和“name”中的注释也是自动生成的([您正在引用的字段]恰好有一个标签[使其更易于引用])
,通过CSS ID引用特定字段是不可复制的。我更新了答案,使用了稳定的CSS引用,但没有使用is,但我不明白为什么您试图在标签中填充值,只能使用文本框或带有标记的字段。从(表单部分;它似乎没有锚),我的印象是,可以有如下表单元素:
Bar
然后,在Codeception中:
$I->fillField('Bar','CONTENT')waitForJS(“return$.active==0;”,10)似乎没有任何效果。