【问题标题】:Test cases failing on Firefox but successfully execute on Chrome测试用例在 Firefox 上失败但在 Chrome 上成功执行
【发布时间】:2017-03-14 17:36:06
【问题描述】:

出于某种我无法理解的原因,我的测试用例在 Firefox 上失败但在 Chrome 上成功执行。

例如,这个简单的测试用例在 Chrome 上可以正常执行,但在 Firefox 上会失败:

*** Settings ***
Documentation  This is some test sample login test
Library  Selenium2Library
Resource  ../Resources/common_resources.robot
Resource  ../Resources/users.robot

*** Test Cases ***
Test Robot Framework Logging
    [Documentation]  Some info about the valid login test step
    [Tags]  Login
    Open Browser  ${LOGIN URL}  ${BROWSER}
    Input Text  Username  ${VALID USER}
    Input Password  Password  ${VALID PASSWORD}
    Click Button  Log On
    Page Should Contain  Welcome
    [Teardown]  Close Browser

但是,如果我在按钮单击和断言之间放置一个 Sleep 10 关键字,它就会起作用。这让我认为,出于某种原因,壁虎 webdriver 参与其中。

我正在运行最新版本的 robotframework-selenium2library 和 webdriver。

据我了解,根本不鼓励在代码中包含 Sleeps。我该如何解决这个问题?我应该在哪里寻找?

非常感谢您的任何建议!

【问题讨论】:

  • 在您的帖子中有两个问题:FF 和 Chrome 之间的行为差​​异。第二个是关于等待策略。建议每个帖子坚持一个问题。如果您希望我们帮助您解决浏览器问题,请向我们提供更多详细信息以重现该问题。确切的浏览器版本和 webdriver 版本,如果该站点可从 Internet 访问,则为 URL。根据提供的基本示例,我们将无法提供太多帮助。
  • 您在使用 Firefox 运行测试时收到什么样的错误消息?等待直到命令而不是睡眠怎么样?
  • 如果这是一个模棱两可的问题,我深表歉意,英语不是我的母语。版本:FF v52.0、Chrome v6.0.2924.87、geckodriver v0.15.0 和 ChromeDriver v2.28 (32b)。用 pip 更新了 RF 和 selenium2library。该站点只能通过 VPN 访问,我不允许共享 URL,但它具有以下格式:mydomain/Account/LogOn?ReturnUrl=%2f 当我使用任一浏览器运行测试套件时,我都可以成功看到该页面并登录。使用 Chrome等到页面加载并检查断言,而 Firefox 则不会(无睡眠)。谢谢!
  • @PONKA 没有错误信息,只是运行失败。我检查了不同的 Wait Until 关键字,但我认为它们不是我需要的。

标签: robotframework selenium2library


【解决方案1】:

你是正确的,你应该避免睡觉。等待一个明确的条件比等待一个固定的时间段要好得多。如果您养成经常调用sleep 的习惯,最终会导致您的 chrome 测试运行得比必要的慢得多。

根据我的经验,在 Firefox 上的测试运行速度比在 chrome 上慢得多,因此您必须小心等待页面加载和元素可用。一个简单的解决方案可能是将page should contain 替换为Wait until page contains,并设置适当的超时时间。

您还可以使用更高级的库,该库具有一些内置支持等待页面加载的功能,例如 robotframework-pageobjectlibrary。这个库使编写您自己的关键字变得非常容易,这些关键字可以访问完整的 selenium API,包括它对wait on various conditions 的能力。页面对象库还提供了 python 上下文管理器,用于包装导致新页面加载的操作。

【讨论】:

  • 嗨!等到页面包含超时工作,谢谢。如果可以,请问这是否可以视为“创可贴解决方案”而不是适当的方法?我问的原因是因为我想养成良好的习惯而不是修补周围的东西:P
  • @Xour:一般来说,等待页面包含某些内容是正确的方法。在这种特定情况下是否是正确的方法很难说,但这取决于您在等待什么,无论是初始页面加载的一部分还是 ajax 调用,您是否正在尝试等待一些独特的东西与否,依此类推。
  • 谢谢,感谢您的回答!我很抱歉花了太长时间才回复你。我现在将使用 Wait Until Page Contains 关键字和合理的超时时间(5 秒应该绰绰有余)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多