1

我正在尝试使用 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 将元素识别为可见?

4

1 回答 1

0

您可以通过按钮单击或任何其他事件以编程方式提交表单。

$('#form_id').trigger('submit');

此外,如果您想在不使用 jQuery Mobile Ajax 的情况下提交表单,请将以下属性添加到表单 div。

<form id="foo" data-ajax="false">

参考:

  1. .submit()
  2. data-ajax="false"
于 2013-09-27T08:32:00.993 回答