简体   繁体   English

Python:重现 Splinter/Selenium 行为以测试使用 Javascript 的网站

[英]Python: Reproduce Splinter/ Selenium Behaviour for Testing a Website That Uses Javascript

I have a bot which interacts with a website using Splinter and Selenium.我有一个使用 Splinter 和 Selenium 与网站交互的机器人。 The website uses Javascript and updates in real time.该网站使用 Javascript 并实时更新。 The bot works well 90% of the time, but due to random events it will sometimes raise an Exception.机器人在 90% 的时间内运行良好,但由于随机事件,它有时会引发异常。 It is very hard for me to debug these events, by the time I am in the debugger the website has changed.我很难调试这些事件,当我进入调试器时,网站已经改变了。

Is there anyway I can record the website data and play it back, like with vcrpy?无论如何我可以记录网站数据并播放它,就像使用vcrpy一样? Or is there anyway I can record the behaviour so I can debug and test?或者无论如何我可以记录行为以便我可以调试和测试?

Closest thing you can do is to take screen shots of web page on various events.您可以做的最接近的事情是对各种事件的网页进行屏幕截图。 You will have to use EventFiringWebDriver.您将不得不使用 EventFiringWebDriver。 Whichever even you want to take screen shot call screen_shot function there.无论您想在那里进行屏幕截图,请调用screen_shot函数。

from selenium.webdriver.support.events import EventFiringWebDriver
from selenium.webdriver.support.events import AbstractEventListener
import os
import time
class ScreenShotListener(AbstractEventListener):
    DIR_NAME = None
    def screen_shot(self, driver):
        dir = os.path.curdir
        unique_filename = str(int(time.time() * 1000)) + ".png"
        fpath = os.path.join(dir, unique_filename)
        driver.get_screenshot_as_file(fpath)

    def before_navigate_to(self, url, driver):
        pass

    def after_navigate_to(self, url, driver):
        pass

    def before_navigate_back(self, driver):
        pass

    def after_navigate_back(self, driver):
        pass

    def before_navigate_forward(self, driver):
        pass

    def after_navigate_forward(self, driver):
        pass

    def before_find(self, by, value, driver):
        pass

    def after_find(self, by, value, driver):
        pass

    def before_click(self, element, driver):
        pass

    def after_click(self, element, driver):
        pass

    def before_change_value_of(self, element, driver):
        pass

    def after_change_value_of(self, element, driver):
        pass

    def before_execute_script(self, script, driver):
        pass

    def after_execute_script(self, script, driver):
        pass

    def before_close(self, driver):
        pass

    def after_close(self, driver):
        pass

    def before_quit(self, driver):
        pass

    def after_quit(self, driver):
        pass

    def on_exception(self, exception, driver):
        pass

driver = EventFiringWebDriver(driver, ScreenShotListener())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM