【问题标题】:Multiple URLs in multiple browsers in selenium (local) pythonselenium(本地)python 中多个浏览器中的多个 URL
【发布时间】:2022-12-05 00:12:01
【问题描述】:

我有一个测试脚本,我想在我的机器上本地运行多个浏览器(Chrome 和 Firefox)上的多个 URL。每个浏览器都必须打开测试脚本的所有 URL。我已经为多个浏览器的多个 URL 运行了测试脚本。我有以下代码来完成任务。有没有更好的方法来执行此代码?谢谢


import time
from selenium import webdriver


driver_array = [webdriver.Firefox(), webdriver.Chrome()]
sites = [
    "http://www.github.com",
    "https://tribune.com.pk"
]


for index, browser in enumerate(driver_array):
        print(index, browser)
        for index, site in enumerate(sites):
            print(index,site)
            browser.get(site)
            time.sleep(5)
            # localitems()
            # sessionitems()
            # def localitems() :
            local_storage = browser.execute_script( \
                    "var ls = window.localStorage, items = {}; " \
                    "for (var i = 0, k; i < ls.length; ++i) " \
                     "items[k = ls.key(i)] = ls.getItem(k);"\
                    "return items; ")
            print(local_storage)

            # def sessionitems() :
            session_storage = browser.execute_script( \
                    "var ls = window.sessionStorage, items = {}; " \
                    "for (var i = 0, k; i < ls.length; ++i) " \
                    "items[k = ls.key(i)] = ls.getItem(k);"\
                    "return items; ")
            print(session_storage)

【问题讨论】:

    标签: python selenium selenium-webdriver cross-browser browser-automation


    【解决方案1】:

    这是改进代码的一种可能方法。

    import time
    from selenium import webdriver
    
    
    driver_array = [webdriver.Firefox(), webdriver.Chrome()]
    sites = [    "http://www.github.com",    "https://tribune.com.pk"]
    
    
    def get_storage_items(driver, storage_type):
        items = driver.execute_script(
            f"var ls = window.{storage_type}, items = {{}}; "
            f"for (var i = 0, k; i < ls.length; ++i) "
            f"items[k = ls.key(i)] = ls.getItem(k);"
            "return items; "
        )
        return items
    
    
    for index, browser in enumerate(driver_array):
        print(index, browser)
        for index, site in enumerate(sites):
            print(index, site)
            browser.get(site)
            time.sleep(5)
            local_storage = get_storage_items(browser, "localStorage")
            print(local_storage)
            session_storage = get_storage_items(browser, "sessionStorage")
            print(session_storage)
    

    在此版本的代码中,localitems() 和 sessionitems() 函数已被删除,它们的逻辑已合并为一个 get_storage_items() 函数,该函数将驱动程序和 storage_type(localStorage 或 sessionStorage)作为参数并返回指定存储中的项目。每个站点调用此函数两次,每种存储类型调用一次,然后打印项目。这避免了代码重复,并使代码更易于阅读和理解。

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多