【问题标题】:How to dynamically update Selenium methods without restarting the webdriver?如何在不重新启动 webdriver 的情况下动态更新 Selenium 方法?
【发布时间】:2020-12-06 20:39:27
【问题描述】:

我有一个与 EA Sports FIFA 21 网络应用程序交互的 Selenium 机器人,您可以在其中买卖游戏中的足球运动员。界面看起来像this

假设我的原始程序是一个单一的脚本:

  1. login() - 登录平台
  2. goToTransferMarket() - 导航到“市场搜索”页面
  3. inputSearchParameters(playername) - 输入我的搜索参数进行搜索
  4. clickSearch() - 点击搜索按钮
  5. evaluateResults(buy_price) - 评估结果并以低于购买价格的价格购买球员

如果任何方法失败,我将不得不退出并从头开始。为了解决这个问题,我构建了一个tkinter GUI,其中包含在各自线程中执行的每个函数的按钮。这样如果某个功能失败,比如点击搜索按钮,我可以手动执行该操作并继续测试后续方法。

但是,为了修复损坏的方法,我必须从头开始重新启动程序,这需要一个繁琐的登录过程来修复一些简单的事情,比如忘记将字符串转换为整数。大量登录也会引起不必要的注意。

鉴于我在当前测试会话期间已经登录,有没有办法重新编译我的程序并“获取”现有的 webdriver 会话?

更好的是,是否可以动态更改我的函数并使用我的 GUI 中的“使用最新代码更新”按钮更新它们?

我的 GUI 中的“玩家列表”框会写入一个文本文件,这使我可以更改机器人正在实时搜索的对象。当我单击“使用列表出价”按钮时,文本文件将传递给主要的机器人搜索方法。这让我想知道是否可以将其设置为以某种方式在单独的线程中重新编译部分代码并保留现有的 webdriver 会话。任何帮助都会很棒,谢谢。

【问题讨论】:

    标签: python multithreading selenium selenium-webdriver tkinter


    【解决方案1】:

    你可以添加一个无限的while循环并尝试catch来确保你的测试永远不会失败:

    如果您使用的是 chrome :

    您可以使用调试器地址连接到现有的 chrome 会话,因此从 cmd 使用指定的调试端口启动 chrome

    使用调试端口启动chrome:(在windows中,搜索其他操作系统如何在特定调试端口启动chrome)

    <path>\chrome.exe" --remote-debugging-port=1559

    在硒中使用:

    JAVA:

    System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
    
    ChromeOptions options = new ChromeOptions();
    
    options.setExperimentalOption("debuggerAddress", "127.0.0.1:1559");
    
    WebDriver browser=new ChromeDriver(options);`
    

    Python:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:1559")
    driver = webdriver.Chrome(options=chrome_options)
    

    【讨论】:

      猜你喜欢
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2020-02-15
      • 2020-12-23
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多