2016-08-02 104 views
1

我是硒的新手,我想在彈出警報時採取警報框的截圖。 我寫的代碼如下:無法在使用python的硒中截取警報框截圖

import unittest 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoAlertPresentException 
import time 


class SearchXSS(unittest.TestCase): 

def setUp(self): 
    self.driver = webdriver.Firefox() 

def test_search_in_python_org(self): 
    driver = self.driver 
    driver.get("http://testfire.net/") 
    ele = driver.find_element_by_name("txtSearch") 
    ele.send_keys("<script>alert(document.cookie)</script>") 
    ele.send_keys(Keys.RETURN) 
    try: 
     time.sleep(1) 
     alert = driver.switch_to_alert() 
     driver.get_screenshot_as_file('screenshot.png') 
     alert.accept() 
    except NoAlertPresentException as e: 
     print "no alert to accept " 
    fo.close() 


def tearDown(self): 
    self.driver.quit() 

if __name__=="__main__": 
    unittest.main() 

我面臨的問題,同時採取screenshot.The錯誤信息如下

====================================================================== ERROR: test_search_in_python_org (main.SearchXSS) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/user/programs/sele/testx.py", line 22, in test_search_in_python_org driver.get_screenshot_as_file('screenshot.png') File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 798, in get_screenshot_as_file png = self.get_screenshot_as_png() File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 817, in get_screenshot_as_png return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 827, in get_screenshot_as_base64 return self.execute(Command.SCREENSHOT)['value'] File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute self.error_handler.check_response(response) File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 191, in check_response raise exception_class(message, screen, stacktrace, value['alert'].get('text')) UnexpectedAlertPresentException: Alert Text: amSessionId=92632533494 Message: Unexpected modal dialog (text: amSessionId=92632533494) Stacktrace: at fxdriver.modals.closeUnhandledAlert/< (file:///tmp/tmpdnEJbt/extensions/[email protected]/components/prompt-service.js:4745) at (http://testfire.net/search.aspx?txtSearch=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E:80)

---------------------------------------------------------------------- Ran 1 test in 10.346s

FAILED (errors=1) [Finished in 10.4s with exit code 1]

幫我出這個問題。

回答

1

你不能把screenshotalert中,您需要處理alert第一裝置acceptdismiss然後去,因爲當硒去採取截圖與警報目前採取的截圖,它總是拋出UnexpectedAlertPresentException因爲你得到, 使用selenium不可能使用alert框進行屏幕截圖。所以,你需要如下操作: -

alert = driver.switch_to_alert() 
alert.accept() 
driver.get_screenshot_as_file('screenshot.png') 

如果你想採取截圖與alert,你應該嘗試一些其他的圖書館借了一些不同的方法,在java中有Robot類禮物能夠採取screenshot在這種類型的場景,但我不確定什麼是在python等效。

+0

謝謝Saurabh,但我想採取'alert'框的截圖是這樣的意圖.. – user3513995

+0

@ user3513995看看是否有任何其他庫提供的python取得屏幕截圖..而在Java中有一個「機器人」類在這種情況下截取屏幕截圖可能是相當於python的這個東西... :) –