PHPUnit Selenium, clickAndWait() 函数在 Opera 中不起作用

2022-08-30 20:10:47

我在Opera中有问题。如果我单击了测试代码中的元素,则不会加载页面。在其他浏览器(如Firefox,IE,Chrome和Safari)中,它可以正常工作。PHPUnit_Selenium

法典:

$browser->clickAndWait(link);

这是硒遥控器的后续步骤:

click(link)
waitForPageToLoad(120000)

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

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

你知道出了什么问题吗?


答案 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 []

答案 2

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

例如:

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

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

  • /html/body/div/table/tr/td (在许多情况下,这将同时返回测试和值)
  • /html/body/div/table/tr[1]/td[1] ( 更精确的匹配只是为了测试)
  • /html/body/div/table/tbody/tr/td ( 注意添加的 tbody )

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

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

这两个问题都会导致不匹配。


推荐