Javascript Python + Selenium + PhantomJS 脚本中的警报
Javascript alerts in Python + Selenium + PhantomJS script
我尝试 "click" Javascript 使用 Python 脚本在 DSL 调制解调器中提醒重新启动确认,如下所示:
#!/usr/bin/env python
import selenium
import time
from selenium import webdriver
cap = {u'acceptSslCerts': True,
u'applicationCacheEnabled': True,
u'browserConnectionEnabled': True,
u'browserName': u'phantomjs',
u'cssSelectorsEnabled': True,
u'databaseEnabled': False,
u'driverName': u'ghostdriver',
u'driverVersion': u'1.1.0',
u'handlesAlerts': True,
u'javascriptEnabled': True,
u'locationContextEnabled': False,
u'nativeEvents': True,
u'platform': u'linux-unknown-64bit',
u'proxy': {u'proxyType': u'direct'},
u'rotatable': False,
u'takesScreenshot': True,
u'version': u'1.9.8',
u'webStorageEnabled': False}
driver = webdriver.PhantomJS('/usr/lib/node_modules/phantomjs/bin/phantomjs', desired_capabilities=cap)
driver.get('http://username:passwd@192.168.1.254')
sbtn = driver.find_element_by_id('reboto_btn')
sbtn.click()
time.sleep(4)
al = driver.switch_to_alert()
print al.accept()
但是,即使我在 desired_capabilities
中设置了 handlesAlerts
,我也会在下面粘贴异常。
我该如何解决?异常原因是什么?
异常:
---------------------------------------------------------------------------
WebDriverException Traceback (most recent call last)
/usr/local/bin/pjs/asus_reboot.py in <module>()
36 #ipdb.set_trace()
37
---> 38 print al.accept()
39
40 #print al.text
/usr/local/venvs/asusreboot/local/lib/python2.7/site-packages/selenium/webdriver/common/alert.pyc in accept(self)
76 Alert(driver).accept() # Confirm a alert dialog.
77 """
---> 78 self.driver.execute(Command.ACCEPT_ALERT)
79
80 def send_keys(self, keysToSend):
/usr/local/venvs/asusreboot/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.pyc in execute(self, driver_command, params)
173 response = self.command_executor.execute(driver_command, params)
174 if response:
--> 175 self.error_handler.check_response(response)
176 response['value'] = self._unwrap_value(
177 response.get('value', None))
/usr/local/venvs/asusreboot/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.pyc in check_response(self, response)
134 if exception_class == ErrorInResponseException:
135 raise exception_class(response, value)
--> 136 raise exception_class(value)
137 message = ''
138 if 'message' in value:
WebDriverException: Message: Invalid Command Method - {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"53","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:36590","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"sessionId\": \"fc97c240-f098-11e4-ae53-e17f38effd6c\"}","url":"/accept_alert","urlParsed":{"anchor":"","query":"","file":"accept_alert","directory":"/","path":"/accept_alert","relative":"/accept_alert","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/accept_alert","queryKey":{},"chunks":["accept_alert"]},"urlOriginal":"/session/fc97cea0-f098-11e4-ae53-e17f38eaad6c/accept_alert"}
在java,driver.switchTo().alert().accept();会做的工作。
我不确定,你为什么要使用 "print al.accept()",可能是你想打印文本?然后 alert.getText() 将在 java 中执行,如果我错了,抱歉,因为我确定在 python.
中
谢谢,
穆拉利
http://seleniumtrainer.com/
由于 PhantomJs 不支持警告框。您需要为此使用执行器。
driver.execute_script("window.confirm = function(msg) { return true; }");
我尝试 "click" Javascript 使用 Python 脚本在 DSL 调制解调器中提醒重新启动确认,如下所示:
#!/usr/bin/env python
import selenium
import time
from selenium import webdriver
cap = {u'acceptSslCerts': True,
u'applicationCacheEnabled': True,
u'browserConnectionEnabled': True,
u'browserName': u'phantomjs',
u'cssSelectorsEnabled': True,
u'databaseEnabled': False,
u'driverName': u'ghostdriver',
u'driverVersion': u'1.1.0',
u'handlesAlerts': True,
u'javascriptEnabled': True,
u'locationContextEnabled': False,
u'nativeEvents': True,
u'platform': u'linux-unknown-64bit',
u'proxy': {u'proxyType': u'direct'},
u'rotatable': False,
u'takesScreenshot': True,
u'version': u'1.9.8',
u'webStorageEnabled': False}
driver = webdriver.PhantomJS('/usr/lib/node_modules/phantomjs/bin/phantomjs', desired_capabilities=cap)
driver.get('http://username:passwd@192.168.1.254')
sbtn = driver.find_element_by_id('reboto_btn')
sbtn.click()
time.sleep(4)
al = driver.switch_to_alert()
print al.accept()
但是,即使我在 desired_capabilities
中设置了 handlesAlerts
,我也会在下面粘贴异常。
我该如何解决?异常原因是什么?
异常:
---------------------------------------------------------------------------
WebDriverException Traceback (most recent call last)
/usr/local/bin/pjs/asus_reboot.py in <module>()
36 #ipdb.set_trace()
37
---> 38 print al.accept()
39
40 #print al.text
/usr/local/venvs/asusreboot/local/lib/python2.7/site-packages/selenium/webdriver/common/alert.pyc in accept(self)
76 Alert(driver).accept() # Confirm a alert dialog.
77 """
---> 78 self.driver.execute(Command.ACCEPT_ALERT)
79
80 def send_keys(self, keysToSend):
/usr/local/venvs/asusreboot/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.pyc in execute(self, driver_command, params)
173 response = self.command_executor.execute(driver_command, params)
174 if response:
--> 175 self.error_handler.check_response(response)
176 response['value'] = self._unwrap_value(
177 response.get('value', None))
/usr/local/venvs/asusreboot/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.pyc in check_response(self, response)
134 if exception_class == ErrorInResponseException:
135 raise exception_class(response, value)
--> 136 raise exception_class(value)
137 message = ''
138 if 'message' in value:
WebDriverException: Message: Invalid Command Method - {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"53","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:36590","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"sessionId\": \"fc97c240-f098-11e4-ae53-e17f38effd6c\"}","url":"/accept_alert","urlParsed":{"anchor":"","query":"","file":"accept_alert","directory":"/","path":"/accept_alert","relative":"/accept_alert","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/accept_alert","queryKey":{},"chunks":["accept_alert"]},"urlOriginal":"/session/fc97cea0-f098-11e4-ae53-e17f38eaad6c/accept_alert"}
在java,driver.switchTo().alert().accept();会做的工作。
我不确定,你为什么要使用 "print al.accept()",可能是你想打印文本?然后 alert.getText() 将在 java 中执行,如果我错了,抱歉,因为我确定在 python.
中谢谢, 穆拉利 http://seleniumtrainer.com/
由于 PhantomJs 不支持警告框。您需要为此使用执行器。
driver.execute_script("window.confirm = function(msg) { return true; }");