我正在尝试使用Selenium 2.0来自动化一组页面的单元测试。目前,我导航到该页面并等待所有元素都可访问。然而,似乎由于jQuery Mobile使用AJAX加载页面,我页面上的提交按钮会混淆Selenium,因为它认为它不可见。
我的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将元素识别为可见?
答案 0 :(得分:0)
您可以在点击按钮或任何其他事件时以编程方式提交表单。
$('#form_id').trigger('submit');
此外,如果您想在不使用jQuery Mobile Ajax的情况下提交表单,请将以下属性添加到表单div。
<form id="foo" data-ajax="false">
<强>参考文献:强>