【问题标题】:Permanently / on-every-refresh injected javascript with selenium使用 selenium 永久/每次刷新注入 javascript
【发布时间】:2014-07-17 11:23:30
【问题描述】:

我使用 selenium webdriver 进行了半自动测试(使用 python 3)。半自动化意味着,有一些例程,每次都会发生,但也有一些用户与浏览器的交互(可能的页面刷新,重定向,...)

我需要的是永久注入 javascript 代码,每次刷新页面时都会执行该代码。 Selenium execute_script 制作匿名函数包装器,每次刷新都会丢失。

那么有什么方法可以创建这样的例程吗?可能(并且很好)的解决方法是检测浏览器何时刷新(我不确定是否可能)并且每次再次注入 js。

我不会创建任何浏览器扩展,因为 js 代码只是框架的一部分,正在开发中。 (而且我还需要在 Chrome 和 Firefox 中执行此操作,这需要更多的工作来处理它)。

感谢您的帮助:)

【问题讨论】:

    标签: javascript python selenium selenium-webdriver


    【解决方案1】:

    当页面重新加载后尝试执行时,我建议对 Selenium 抛出的特定错误使用 try except 功能。这样您就可以专注于修复抛出的错误。然后您可以执行 javascript 并实现递归编程以重新执行您尝试的最后一条语句。

    蟒蛇

        driver.execute_script("script goes here")
        #call function at thrown exception place in script
    

    注册一个事件监听器可能会让你在它发生时捕捉它。这实际上取决于正在发生的事情以及通讯的位置。这是参考:http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/events/WebDriverEventListener.html

    【讨论】:

    • 我认为刷新页面时不会抛出这种异常。 Selenium 看起来非常单向,因此您可以控制浏览器,但您无法检索用户操作(例如用户重定向到不同的页面) - 没有抛出异常(据我测试)Selenium 1 支持某些东西称为 user-extension.js,它允许用户以我想要的方式将 JS 注入浏览器(而不是页面环境)。但据我研究,selenium 2 webdriver 不支持此功能。如果我误解了你的意思,请纠正我:)
    • 有点,我应该更清楚...我会编辑。我的出发点是,如果您尝试在与预期不同的页面上执行 Selenium 代码......它不起作用并引发错误。因此,您实际上不会捕获页面错误,而是捕获 Selenium 执行错误,因为该页面不是您所期望的。然后您执行 javascript 以将其恢复到您的预期并递归调用失败的函数。这更清楚吗?如果不是,我可能不明白这次刷新到底导致了什么,在这种情况下你可以放一些代码来澄清一下吗?
    • 我现在明白了。它有效 - 但出于我的目的,我需要定期检查(尝试一些东西),这不是很好,但如果没有找到其他解决方案可以接受,谢谢。
    • 再说一次,我不知道你的代码……但是你可以注册一个 Selenium 事件监听器来触发。如果您想针对特定的可检测事物,那可能更适合您……然后您可以在其中执行脚本。在上面编辑...
    猜你喜欢
    • 2018-01-08
    • 2019-09-19
    • 2017-11-08
    • 1970-01-01
    • 2020-08-13
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多