21

PHPUnit_Selenium在 Opera 中遇到问题。如果我点击了测试代码中的元素,页面将不会加载。在 Firefox、IE、Chrome 和 Safari 等其他浏览器中,它可以正常工作。

代码:

$browser->clickAndWait(link);

这是 SELENIUM REMOTE CONTROL 的下一步:

click(link)
waitForPageToLoad(120000)

超时后,如果我点击浏览器中的链接,页面将重新加载。

我有 Selenium RC v. 2.31.0 和 Opera 版本 12.41,但我也在 Opera 11.50 上进行了测试。

你知道有什么问题吗?

4

4 回答 4

1

我在FF中也遇到了这个问题,这是我想出的解决方案:

def wait_for_element_by_id(eid):
   "Wait for an element to be present"
   element = WebDriverWait(driver, 10).until(
       EC.presence_of_element_located((By.ID, eid))
   )
   return []
于 2016-09-16T21:10:06.677 回答
0

原始帖子中没有足够的信息来建议一个明确的解决方案,但是结合@Andre 提供的评论,“清理”浏览器会这样做,并反过来提供诸如“复制 xPath”之类的功能可能会非常具有误导性,并在测试期间导致许多问题,具体取决于 xPath 的结构。

例如:

<html>
    <head></head>
    <body>
        <div>
            <table>
                <tr>
                    <td>test</td>
                </tr>
                <tr>
                    <td>value</td>
                </tr>
            </table>
        </div>
    </body>
</html>

虽然上面的代码非常少,但浏览器会将 test 的 xPath 报告为以下之一:

  • /html/body/div/table/tr/td (在许多情况下会返回 test 和 value )
  • /html/body/div/table/tr[1]/td[1] (更精确的匹配只是测试)
  • /html/body/div/table/tbody/tr/td (注意添加的 tbody )

等等。显然,使用更唯一的标识符(IE an id -> //*[@id="someElement"])不会遇到这个问题,但是在我们接管的许多项目中,单元测试是最初只在一个浏览器上完成,我们看到了与报告的类似的错误,结果证明“清理”浏览器确实会产生以下两个问题之一:

  • 该路径是在“清理”的浏览器上检索到的,然后在不会也找不到该元素的浏览器上运行。
  • 该路径是在未“清理”的浏览器上检索的,然后在进行清理的浏览器上运行。

这两个问题导致不匹配。

于 2013-05-01T21:06:35.003 回答
0

我有类似的问题,不幸的是,我想出的唯一解决方案是......添加“睡眠”。丑陋,但有效。

于 2014-12-24T12:40:37.723 回答
-1

单击某些弹出窗口或创建后,您只需要在单击函数“waitForElementPresent”或“waitForChange”后调用。

clickAndWait = click() + 一些等待函数.... 好的做法是在单击之前使用等待函数,这样可以节省异步调用。

selenium.waitForElementPresent(“myFooElement”);
selenium.click(“myFooElement”);
于 2015-02-03T13:45:33.457 回答