【问题标题】:How to make Selenium WebDriver not to wait for whole page to load如何使 Selenium WebDriver 不等待整个页面加载
【发布时间】:2014-09-26 09:00:27
【问题描述】:

我正在为 Firefox 使用带有 Selenium webdriver 的 python 2.7,我遇到了一个我无法解决或在 Internet 上找到解决的问题。 我的任务是打开大约 10k 个网页(adsl 路由器 Web 界面 - 通过 IP 地址)并上传新固件。我写了代码,但为了完成它,我必须学习如何让 selenium webdriver 不要像永远那样等待页面加载,而是等待 2 分钟(这是上传新固件所需的时间),然后继续下一步. 我以为我让它永远等待(等待路由器重新连接 - 慢得多但我可以在没有帮助的情况下完成)但问题是当我单击上传按钮时需要 2 分钟上传新固件,然后路由器重新启动以应用更改(需要不到 2 分钟),然后尝试连接(大约 10 秒),即使它获得了其他 IP,它也永远不会加载,我的程序会永远等待。 所以,我想跳过所有这些,我希望程序在前 2 分钟后继续到下一个路由器。可以做到吗?我读了一些关于“pageLoadingStrategy”的东西,但我不明白如何使用它。 如果不明白请写信给我,因为英语不是我的母语。下面你可以看到代码示例,在 button.submit() 之后它应该等待 2 分钟然后继续,而不是永远等待:

def firmware_upload():
  global ip
  br.get("http://"+ip+"/upload.html")
  button = br.find_element_by_xpath('//input[@type="file" and @name="filename"]')
  button.send_keys("/home/djura/Downloads/KW5815A_update_140417")
  button.submit()
  print ("Odradjen UPDATE SOFTWARE-a!")
  return

【问题讨论】:

  • “我的任务是打开大约 10k 网页......并上传新固件”——我相信这个任务不是 UI 自动化(即不是 Selenium 工作),而是与负载相关的事情测试。例如可以使用 Grinder 或 JMeter 完成。
  • O,但它是 UI 自动化。我必须登录到每个路由器并检查它是否需要升级。如果您有其他建议如何做到这一点,请分享。这是我知道要做的,所以我使用 Selenium。
  • 既然你提到了其他方法...我可以尝试通过 telnet...但是如果我可以让 Selenium 不要等待它会是超级的,因为我已经为我的工作准备好了程序。
  • 以 telnet 方式从头开始......两个版本在 telnet 上打印相同:-(
  • 嗯,你可以尝试使用JMeter。使用 JMeter 编写非常简单的脚本或修改现有的脚本。尝试一下,如果您需要有关此工具的建议,欢迎您提出新问题。

标签: python selenium selenium-webdriver


【解决方案1】:

问题可能是因为您使用的是button.submit,如果我没记错的话,它会等待操作返回。因此,您应该找到实际提交按钮并使用click点击它,例如

submit_button = br.find_element_by_id('SUBMIT_BTN_ID')
submit_button.click()

附:在您的示例代码中,您的 button 变量实际上是指输入元素这一事实具有误导性。

【讨论】:

  • 感谢您的回复。这不是误导,它实际上是在工作,但它是一个机器人。当我手动单击“提交”按钮时,它正在等待操作完成。但是当我手动执行此操作时,我可以关闭窗口并启动另一个以打开新链接。我正在尝试在 selenium 中找到解决此问题的方法,而无需每次都打开和关闭窗口。
【解决方案2】:

看看这是否有效。

try
{
br.manage().timeouts().pageLoadTimeout(2, TimeUnit.MINUTES);
global ip
br.get("http://"+ip+"/upload.html")
button = br.find_element_by_xpath('//input[@type="file" and  @name="filename"]')
button.send_keys("/home/djura/Downloads/KW5815A_update_140417")
button.submit()
print ("Odradjen UPDATE SOFTWARE-a!")
return

}
catch(TimeoutException e)
{
print("2min over");
}

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多