Html 动态填充<;选择>;测试期间未使用Codeception填充
我对Codeception比较陌生,正在尝试使用它和Firefox的SeleniumWebDriver对表单进行验收测试。表单(可在上获得)主要由一个文本框和一个自动填充的表单组成,如果文本框中的输入导致多个匹配,则该表单将插入DOM中;每个字段也有一个提交按钮 我遇到的问题是,当在Firefox中正常测试时,其行为与预期一致,并且在初始文本搜索返回多个匹配的情况下自动填充(例如,输入任何布莱顿邮政编码,尽管特定场景是搜索“布莱顿市政厅,巴塞洛缪广场”,返回3个结果). 但是,当尝试通过Codeception进行测试(运行完整的测试或通过控制台尝试每个步骤)时,会将插入到DOM中,但似乎从未使用实际结果填充(它包含的唯一元素是“请选择您的地址…”) 我的测试步骤如下:Html 动态填充<;选择>;测试期间未使用Codeception填充,html,forms,dom,selenium-webdriver,codeception,Html,Forms,Dom,Selenium Webdriver,Codeception,我对Codeception比较陌生,正在尝试使用它和Firefox的SeleniumWebDriver对表单进行验收测试。表单(可在上获得)主要由一个文本框和一个自动填充的表单组成,如果文本框中的输入导致多个匹配,则该表单将插入DOM中;每个字段也有一个提交按钮 我遇到的问题是,当在Firefox中正常测试时,其行为与预期一致,并且在初始文本搜索返回多个匹配的情况下自动填充(例如,输入任何布莱顿邮政编码,尽管特定场景是搜索“布莱顿市政厅,巴塞洛缪广场”,返回3个结果). 但是,当尝试通过Code
$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')为了完整性,我尝试了你的建议,使用了一个稳定的CSS引用,得到了预期的结果。重申一下,文本字段的引用不是问题,因为我发布的代码片段正确地填充了该字段。为了澄清,我实际上想问的是,鉴于元素及其内容似乎是在提交文本字段内容后通过AJAX返回的,为什么仅仅等待的时间远远超过显示/填充的必要时间是不够的。我还简要介绍了如何使用waitForJS(“return$.active==0;”,10)代码>似乎没有任何效果。