Open barancev opened 7 years ago
Thanks for the bug report. What does driver.findElement(By.id("theForm")).submit()
do? There is no corresponding “form submit” command in WebDriver, so I’m curious what that does under the bonnet.
Could you attach a trace-level geckodriver log when you have the opportunity?
Here is the code that implements submit operation: https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/remote/http/W3CHttpCommandCodec.java#L291-L301
Trace (with an extra getTitle command in the end, that magically works despite the presense of the alert, I see it in the browser window):
1491826626758 webdriver::server DEBUG Got request POST AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/url")
1491826626758 webdriver::command DEBUG Got request body {"url":"http://comp1:45957/temp/page4272239375507637165.html"}
1491826626758 geckodriver::marionette DEBUG → 74:[0,2,"get",{"url":"http://comp1:45957/temp/page4272239375507637165.html"}]
1491826626760 Marionette TRACE 0 -> [0,2,"get",{"url":"http://comp1:45957/temp/page4272239375507637165.html"}]
1491826627781 Marionette TRACE 0 <- [1,2,null,{}]
1491826627784 geckodriver::marionette DEBUG ← [1,2,null,{}]
1491826627785 webdriver::server DEBUG Returning status Ok
1491826627785 webdriver::server DEBUG Returning body {"value": {}}
1491826627808 webdriver::server DEBUG Got request POST AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/element")
1491826627809 webdriver::command DEBUG Got request body {"value":"#theForm","using":"css selector"}
1491826627809 geckodriver::marionette DEBUG → 63:[0,3,"findElement",{"using":"css selector","value":"#theForm"}]
1491826627810 Marionette TRACE 0 -> [0,3,"findElement",{"using":"css selector","value":"#theForm"}]
1491826627853 Marionette TRACE 0 <- [1,3,null,{"value":{"element-6066-11e4-a52e-4f735466cecf":"749798ac-ff3a-419b-87b1-ed88186d0e26","ELEMENT":"749798ac-ff3a-419b-87b1-ed88186d0e26"}}]
1491826627854 geckodriver::marionette DEBUG ← [1,3,null,{"value":{"element-6066-11e4-a52e-4f735466cecf":"749798ac-ff3a-419b-87b1-ed88186d0e26","ELEMENT":"749798ac-ff3a-419b-87b1-ed88186d0e26"}}]
1491826627854 webdriver::server DEBUG Returning status Ok
1491826627854 webdriver::server DEBUG Returning body {"value":{"element-6066-11e4-a52e-4f735466cecf":"749798ac-ff3a-419b-87b1-ed88186d0e26"}}
1491826627871 webdriver::server DEBUG Got request POST AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/execute/sync")
1491826627872 webdriver::command DEBUG Got request body {"script":"var form = arguments[0];\nwhile (form.nodeName != \"FORM\" && form.parentNode) {\n form = form.parentNode;\n}\nif (!form) { throw Error('Unable to find containing form element'); }\nif (!form.ownerDocument) { throw Error('Unable to find owning document'); }\nvar e = form.ownerDocument.createEvent('Event');\ne.initEvent('submit', true, true);\nif (form.dispatchEvent(e)) { form.submit() }\n","args":[{"element-6066-11e4-a52e-4f735466cecf":"749798ac-ff3a-419b-87b1-ed88186d0e26"}]}
1491826627872 geckodriver::marionette DEBUG → 577:[0,4,"executeScript",{"args":[{"element-6066-11e4-a52e-4f735466cecf":"749798ac-ff3a-419b-87b1-ed88186d0e26"}],"newSandbox":false,"script":"var form = arguments[0];\nwhile (form.nodeName != \"FORM\" && form.parentNode) {\n form = form.parentNode;\n}\nif (!form) { throw Error('Unable to find containing form element'); }\nif (!form.ownerDocument) { throw Error('Unable to find owning document'); }\nvar e = form.ownerDocument.createEvent('Event');\ne.initEvent('submit', true, true);\nif (form.dispatchEvent(e)) { form.submit() }\n","scriptTimeout":null,"specialPowers":false}]
1491826627964 Marionette TRACE 0 <- [1,4,null,{"value":null}]
1491826627964 geckodriver::marionette DEBUG ← [1,4,null,{"value":null}]
1491826627964 webdriver::server DEBUG Returning status Ok
1491826627964 webdriver::server DEBUG Returning body {"value":null}
1491826627983 webdriver::server DEBUG Got request GET AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/alert/text")
1491826627983 geckodriver::marionette DEBUG → 28:[0,5,"getTextFromDialog",{}]
1491826628544 Marionette TRACE 0 -> [0,5,"getTextFromDialog",{}]
1491826628545 Marionette TRACE 0 <- [1,5,null,{"value":"Tasty cheese"}]
1491826628548 geckodriver::marionette DEBUG ← [1,5,null,{"value":"Tasty cheese"}]
1491826628548 webdriver::server DEBUG Returning status Ok
1491826628548 webdriver::server DEBUG Returning body {"value":"Tasty cheese"}
1491826628584 webdriver::server DEBUG Got request GET AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/alert/text")
1491826628585 geckodriver::marionette DEBUG → 28:[0,6,"getTextFromDialog",{}]
1491826628587 Marionette TRACE 0 -> [0,6,"getTextFromDialog",{}]
1491826628587 Marionette TRACE 0 <- [1,6,null,{"value":"Tasty cheese"}]
1491826628587 geckodriver::marionette DEBUG ← [1,6,null,{"value":"Tasty cheese"}]
1491826628587 webdriver::server DEBUG Returning status Ok
1491826628587 webdriver::server DEBUG Returning body {"value":"Tasty cheese"}
1491826628599 webdriver::server DEBUG Got request POST AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/alert/accept")
1491826628600 webdriver::command DEBUG Got request body {}
1491826628600 geckodriver::marionette DEBUG → 23:[0,7,"acceptDialog",{}]
1491826628601 Marionette TRACE 0 -> [0,7,"acceptDialog",{}]
1491826628633 Marionette TRACE 0 <- [1,7,null,{}]
1491826628638 geckodriver::marionette DEBUG ← [1,7,null,{}]
1491826628638 webdriver::server DEBUG Returning status Ok
1491826628638 webdriver::server DEBUG Returning body {"value": {}}
1491826628645 webdriver::server DEBUG Got request GET AbsolutePath("/session/d12b38a0-f17d-4688-a332-bf4ecf2cd82f/title")
1491826628646 geckodriver::marionette DEBUG → 19:[0,8,"getTitle",{}]
1491826628648 Marionette TRACE 0 -> [0,8,"getTitle",{}]
1491826628651 Marionette TRACE 0 <- [1,8,null,{"value":"Testing Alerts"}]
1491826628651 geckodriver::marionette DEBUG ← [1,8,null,{"value":"Testing Alerts"}]
1491826628651 webdriver::server DEBUG Returning status Ok
1491826628651 webdriver::server DEBUG Returning body {"value":"Testing Alerts"}
This is actually https://bugzilla.mozilla.org/show_bug.cgi?id=1487705. The reason is that the Selenium's submit()
method triggers a custom (not trusted) event, and this causes the user prompt to open twice. So closing the alert once will still leave one alert open.
Firefox Version
55.0a1 (2017-04-06) (64-bit) geckodriver 0.15
Platform
Windows 7
Steps to reproduce
Page code:
Scenario:
There are no exceptions, but the alert does not disappear.