我正在尝试使用 Selenium 2.0 来自动化一组页面的单元测试。目前我导航到页面并等待所有元素都可以访问。然而,由于 jQuery Mobiles 使用 AJAX 加载页面,我页面上的提交按钮似乎使 Selenium 感到困惑,因为它认为它不可见。
我的硒测试如下:
IWebElement page = wait.Until<IWebElement>((d) => { return d.FindElement(By.Id("PostCode")); });
IWebElement postCode = driver.FindElement(By.Id("PostCode"));
IWebElement dob = driver.FindElement(By.Id("DOBPicker"));
IWebElement maidenName = driver.FindElement(By.Id("MothersMaidenName"));
IWebElement submit = driver.FindElement(By.Id("SubmitButton"));
postCode.SendKeys("KA257EY");
dob.SendKeys("1955-08-29");
maidenName.SendKeys("onetwothreefour");
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("SubmitButton")));
submit.Click();
Selenium 页面在 wait.Until 时失败,因为它似乎永远不会识别按钮本身是可见的。
我想到的唯一其他解决方案是实现这样的东西:
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("$('#SubmitButton').click();");
然而,jQuery Mobile 似乎在这里发生了一些奇特的事情,因为当点击源自 JS 时,它与帖子一起发送的信息与用户的实际点击不同。这意味着我的页面没有在帖子中发送正确的信息,并且当 JS 而不是用户单击 SubmitButton 时,服务器拒绝了表单提交。
有没有办法强制 Selenium 将元素识别为可见?