【问题标题】:How do I test a Selenium automation without restarting the browser each time?如何在不每次都重新启动浏览器的情况下测试 Selenium 自动化?
【发布时间】:2018-08-03 19:25:00
【问题描述】:

假设我有以下代码:

from selenium import webdriver

if __name__ == '__main__':

    def open_YouTube():
        browser = webdriver.Firefox()
        browser.get("http://www.google.pl")
        fill_search(browser)

    def fill_search(browser):
        elements = browser.find_elements_by_tag_name('input')
        for element in elements:
            if 'what are you looking for' in element.get_attribute('innerHTML'):
                search_box = element
                search_box.get_attribute('value') == 'happiness'



    open_YouTube()

现在,假设我犯了一个错误或想要更改函数 fill_search 中的任何内容,有没有办法只测试该函数,而不需要从头开始运行代码并重新打开浏览器?

例如,在我通过 VBA 实现的 Internet Explorer 自动化中,我有一个函数可以通过名称或 URL 识别当前打开的浏览器实例。我可以运行这个函数并只测试我想要更正的代码,在一个已经打开的浏览器实例上工作。

是否可以通过 Selenium 实现类似的功能?

【问题讨论】:

    标签: python selenium automation


    【解决方案1】:

    有简单(推荐)的方法,也有复杂的方法。

    简单:

    只需导入 pdb 并在浏览器会话中试验功能。一旦一切都按要求工作,更新您的代码并删除 pdb 行。

    def fill_search():
            import pdb; pdb.set_trace()  # Experiment in the browser session
            for element in elements:
                element = driver.find_element_by_tag('input')
                if 'what are you looking for' in element.get_attribute('innerHTML'):
                    search_box = element
                    search_box.get_attribute('value') == 'happiness'
    

    复杂:

    driver = webdriver.Firefox()
    session_id = driver.session_id
    executor_url = driver.command_executor._url
    same_session_driver = webdriver.Remote(command_executor=executor_url, desired_capabilities={})
    same_session_driver.session_id = session_id
    same_session_driver.continue_doing_stuff
    

    【讨论】:

    • 如果我想在调试过程中更改set_trace 下面的代码怎么办?调试器似乎“记住”了旧代码。
    • 您可能误解了 Python 解释器的工作原理。一旦你运行你的脚本,你的 .py 文件的文本就会被读取和解释——从那时起,一切都发生在内存中,你的 .py 文件不再相关,直到你再次运行脚本,所以你必须改变保存代码,然后重新运行以查看更改。
    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多