我正在编写自动化测试,该测试将键发送到表单上的每个文本框(大约5个字段),然后启用并单击提交按钮。我发现测试经常失败,因为仅填充了最后一个字段,并且按钮从未启用。
似乎发送密钥的方法可能执行得太快,无法填充页面。到目前为止,我已经尝试在发送键之前(以及等待元素存在之前)单击每个字段,但这似乎无济于事。
我还试图通过等待页面上每个元素和按钮存在然后继续操作来验证页面是否已完全加载。
我要测试的浏览器是chrome。 (版本79.0.3945.130)硒Web驱动程序是3.11.2chrome驱动程序是最新的chrome
private IWebElement FirstNameInput => Webdriver.FindElement(By.Id("first-name-input"));
// The remaining input fields
public void VerifyPageIsFullyLoaded()
{
// Wait until all elements exist
}
public void EnterFormDetails(FormDetail formDetail)
{
WebDriver.WaitUntilElementExists(FirstNameInput);
FirstNameInput.Click();
FirstNameInput.SendKeys(formDetail.FirstName);
WebDriver.WaitUntilElementExists(LastNameInput);
LastNameInput.Click();
LastNameInput.SendKeys(formDetail.LastName);
WebDriver.WaitUntilElementExists(DateOfBirthInput);
DateOfBirthInput.Click();
DateOfBirthInput.SendKeys(formDetail.DateOfBirth);
WebDriver.WaitUntilElementIsClickable(SubmitButton);
SubmitButton.Click();
}
更新:刚尝试了最新稳定的Selenium Web驱动程序(3.141.0),发现它仍然不那么可靠。
JavascriptExecutor javascript = (JavascriptExecutor)webdriver;
javascript.executeScript("document.getElementById('FirstNameInput').value='test123'");
javascript.executeScript("document.getElementById('LastNameInput').value='test123'");
javascript.executeScript("document.getElementById('DateOfBirthInput').value='test123'");
SubmitButton.Click();
并且如果提交按钮在表单标记中,则可以使用submit()
方法。