2017-02-03 1 views
1

Может кто-нибудь объяснить мне точную разницу между представить() и нажмите кнопку()
Submit() перенаправляет на другую страницу, в то время как щелчок() не позволяет мне получить доступ к внутренней странице

Как мой сценарий я хочу доступ к этому site. когда я нажимаю кнопку входа в систему, используя метод click(). Сайт не позволяет мне получить доступ к внутренней странице, используя метод submit(), сайт перенаправляется на другую страницу.

Итак, я не получаю правильную разницу между этими двумя методами. Для получения дополнительной информации см. Фрагмент кода.

driver.get("https://www.ymlp.com/login.html"); 
driver.manage().window().maximize();  
driver.findElement(By.id("T1")).sendKeys("[email protected]"); 
driver.findElement(By.id("T2")).sendKeys("[email protected]"); 
driver.findElement(By.id("loginbtn")).submit(); 

При выполнении выше кода сайта перенаправляет на другую страницу, в то время как сейчас, только изменяя последнюю строку кода, как показано ниже упомянутый код, сайт не позволяет мне получить доступ к внутренней странице.

driver.findElement(By.id("loginbtn")).click(); 

Может ли кто-нибудь помочь мне по этому вопросу? Я хотел бы знать, почему функция click() здесь не работает.

С наилучшими пожеланиями.

+0

может быть дубликат этого, http: //stackoverflow.com/questions/17530104/selenium-webdriver-submit-vs-click – Chetan

+0

Это не дублирующий вопрос, я предоставил URL-адрес сайта вместе с моим фрагментом кода. но оба метода ведут себя по-другому. можете ли вы объяснить мне, почему click() плохо работает на вышеупомянутом сайте? –

+0

добавить wait перед нажатием кнопки. когда-нибудь щелкнуть метод с помощью кнопки «зная», можно щелкнуть или нет. – Chetan

ответ

1

Даже при нажатии на кнопку вручную, он не работает. Это может быть проблема с приложением. Что касается функции Submit(), ее можно использовать для кнопок внутри тега формы. В основном вы пытаетесь отправить форму.

Если вы внимательно посмотрите на HTML, при нажатии на кнопку, изменяется значение класса к «БТН БТН-вторичный преднагрузки isLocked» и в задней части, если вы идете на вкладку Сеть в окне консоли и анализировать login.js, они имеют функцию

$(document).ready(function(){$("#T1").focus();$(".removeerrorontype").keypress(function(){$(this).removeClass("error");});$("#loginbtn").click(function(e){if($(this).hasClass("isLocked")){return false;} 

Таким образом, я чувствую, что вышеуказанное условие возвращает ложь и, следовательно, он не движется дальше. «isLocked» здесь имеет значение.

0

Оба метода click() и submit() работают одинаково, за исключением того, что submit() ищет формы.

Вы можете использовать метод .click(), чтобы щелкнуть любую кнопку. Для кнопок с кнопками нет ограничений. Это означает, что тип элемента = «кнопка» или тип = «отправить», метод .click() будет работать для обоих. Если кнопка внутри тега или кнопка находится за пределами тега, метод click() будет работать.

.submit() метод используется только для отправки формы после нажатия кнопки. Это означает, что тип элемента = «отправить», а кнопка должна быть внутри тега, тогда будет работать только submit().

В вашем случае, почему нажмите не работает может быть не специфичен к отправке() или нажмите кнопку() Я думаю

0

Try После: работал для меня (я предполагаю)

driver.manage().window().maximize();  
driver.findElement(By.id("T1")).sendKeys("[email protected]"); 
driver.findElement(By.id("T2")).sendKeys("[email protected]"); 

WebDriverWait wait = new WebDriverWait(driver, 20); 
WebDriverWait wait1 = new WebDriverWait(driver, 20); 

wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("loginbtn")))); 
System.out.println("Is Visible"); 
wait1.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("loginbtn")))); 
System.out.println("Is clickable"); 

driver.findElement(By.id("loginbtn")).click(); 
+0

Здравствуйте @Kushal, я пробовал ваш код, но все еще сталкивался с той же проблемой. –

+0

Я пробовал тот же код; он смог нажать кнопку, поскольку он дал мне ошибку из-за неправильных учетных данных. Вы пытались с реальными кредитами? – kushal

+0

Попробуйте с помощью 'driver.findElement (By.id (" loginbtn ")). Submit(); 'затем сравните поведение метода click и submit. –

1

submit() метод применим не к какой-то конкретной button или input поле, но предкам <form> элемент

Он работает как сильфона (это Python код, но точка должна быть такой же):

element_in_form = driver.find_element_by_id('id_of_ANY_element_inside_form') # this might be any locator, not only id 
form = element_in_form.find_element_by_xpath("./ancestor-or-self::form") 
driver.execute_script("arguments[0].submit()", form) 

Там нет диф ference, что есть element_in_form (ввод имени пользователя, ввод пароля, кнопка входа ...), если он присутствует внутри <form>.

Forgot Username/password? ссылка также находится в той же форме и по какой-то причине, используя submit() вы на самом деле не вызвать кнопку Login, но Forgot Username/password? ссылку щелкающий ...

Я могу только предположить, что это ошибка разработчиков