2013-12-14 2 views
2

В некоторых тестах Selinium Webdriver я заметил, что не могу отправить форму, вызвав submit() по любому из элементов формы, но я может позвонить click() на кнопку отправки просто отлично. Для иллюстрации проблемы я создал простую тестовую веб-страницу. В приведенном ниже примере, когда я звоню submit(), я вижу кнопку отправки. Но когда я звоню click(), форма фактически отправляется, и я вижу «Представлено».Selenium click() работает, но submit() не

<html> 
    <body> 
    <?php if(isset($_POST["submit"])): ?> 
    Submitted 
    <?php else: ?> 
     <form method="post"> 
     <input id="submit" name="submit" type="submit" value="submit"> 
     </form> 
    <?php endif; ?> 
    </body> 
</html> 

Я использую this шаблон Selenium, а вот как выглядит мой тест:

@Listeners(ScreenshotListener.class) 
public class LoginTest extends SeleniumBase { 
    @Test 
    public void test() { 
     WebDriver driver = getDriver(); 
     driver.get("http://localhost/test.php"); 
     WebElement submit = driver.findElement(By.id("submit")); 
     submit.click(); // works 
     // submit.submit(); // doesn't work 
    } 
} 
+0

Вы не можете отправить кнопку, введите идентификатор, чтобы сформировать элемент, например. 'id =" myForm "' и попробуйте 'WebElement form = driver.findElement (By.id (" myForm ")); form.submit(); ' – mdesdev

+1

@msdesdev Selenium Давайте будем называть' submit() 'на любом элементе внутри формы, что должно привести к тому, что сама форма будет отправлена, поэтому это должно сработать. Но я все-таки попробовал ваш метод, и это не сработало. – gsingh2011

+0

Извините, что больше не могу помочь, я не работаю с Selenium;) – mdesdev

ответ

0

Хорошо, так что, у меня есть подобный вопрос, и я хотел бы поделиться решением, которое имеет хорошо служил мне до сих пор. На некоторых веб-страницах я должен использовать .Submit(), а на некоторых я должен использовать .Click() на элементе кнопки. Страница, на которой я должен использовать .Click(), сообщит мне, что введенное вами имя пользователя или пароль неверно; в любом случае, если я не укажу часть .Submit() и щелкните вручную, она войдет в систему с программно заполненными учетными данными. Итак, я должен был найти его элемент кнопки по его идентификатору и использовать на нем .Click(). Второй веб-сайт имеет совершенно противоположное поведение и ничего не делает, когда на кнопке используется .Click(). Вместо этого работает .Submit().

Итак, чтобы обойти весь этот беспорядок до тех пор, пока я не выясню его (и я пчел на нем какое-то время), вот что я сделал. Большинство веб-сайтов выполняют подачу заявки на событие Enter key down, так что это именно то, что я сделал.

Вот отрывок из моего кода:

private void Login(string url, string usernameElement, string username, 
        string passwordElement, string password) 
{ 
    IWebDriver driver = new FirefoxDriver(); 
    driver.Navigate().GoToUrl(url); 
    IWebElement query = driver.FindElement(By.Id(usernameElement)); 
    query.SendKeys(username); 
    query = driver.FindElement(By.Id(passwordElement)); 
    query.SendKeys(password); 
    query.SendKeys(Keys.Enter); // simulates Enter key down to submit 
} 

Это небольшое изменение спасло меня всего много головной боли. Я тестировал его на нескольких других веб-сайтах, и до сих пор не было никаких проблем. Я знаю, что это не полное исправление проблемы с библиотекой, но это A исправление.

Смежные вопросы