当我在屏幕截图中看到文本时selenium / phpunit失败

时间:2012-04-30 10:45:00

标签: selenium phpunit

我正在使用selenium和phpunit来测试我的一些网络内容,但它似乎失败了,即使我能看到我在测试失败的屏幕截图中的文本 - 我的测试列在下面

<?php
include('setupclass.php');
class AddNewPicStationTest extends setupclass
{


    protected function setUp()
    {
        parent::setUp();
    }

    public function testMyTestCase()
    {
        $this->open($this->apppath);
        $this->click("css=a > img");
        $this->waitForPageToLoad("30000");
        $this->type("name=username", "");
        $this->type("name=password", "");
        $this->click("name=submit");
        $this->waitForPageToLoad("30000");
        $this->click("link=ADD LIKESTATION");
        $this->waitForPageToLoad("30000");
        $this->click("link=HOME");
        $this->waitForPageToLoad("30000");
        $this->click("link=ADD PICSTATION");
        $this->waitForPageToLoad("30000");
        $this->type("id=title", "Test title 2");
        $this->type("id=message", "test description 2");
        $this->click("id=tip5");
        $this->type("id=album_title", "test album title 2");
        $this->type("id=album_description", "test album description 2");
        $this->click("//input[@value='Login']");
        $this->click("xpath=(//input[@name='group1'])[2]");
        $this->type("name=station_pic_upload", "C:\\Users\\chris laptop\\Desktop\\Logo.png");
        $this->click("name=g");
        $this->waitForPageToLoad("30000");

        **$this->assertTrue($this->isTextPresent("Test title 2"),"object created");**
        $this->assertFalse($this->isTextPresent("Error"),"Error is present");
        $this->assertFalse($this->isTextPresent("Profiler"),"PRofiler is running");

        $this->click("link=LOGOUT");
        $this->waitForPageToLoad("30000");
    }
}
?>

星号线失败,即使它出现在屏幕抓取中..我是新手,任何帮助将不胜感激

这是我的页面,测试正在寻找 - STATION TITLE

<table width="620px" align="left" style="text-align:left;">
        <tr style="font-weight:bold;background-color:#f1f1f1">
            <td colspan="5" STYLE="text-align:center;font-weight:bold">FACEBOOK PIC STATIONS</td>
        </tr>
        <tr style="font-weight:bold;background-color:#f1f1f1">
            <td width="15%">STATION ID</td>
            <td width="50%">STATION TITLE</td>
            <td width="10%">STATION STATS</td>
            <td width="15%">LAST POST</td>
            <td width="10%"></td>

        </tr>
        <?foreach($picstations->result() as $row){?>
            <tr>
                <td><?=anchor('socialmedia/edit_picstation/'.$row->station_id,$row->station_id);?> </td>
                <td><?=anchor('socialmedia/edit_picstation/'.$row->station_id,$row->title);?> </td>
                <td><?=anchor('stats/home/station_stats/'.$row->station_id,'STATS');?> </td>
                <td><?=$this->upd8r_date->get_last_post_from_station_time($row->station_id)?></td>
                <td><?=anchor('socialmedia/delete/'.$row->station_id,'delete');?></td>
            </tr>
        <?}?>
    </table>

并且继承了我的phpunit输出 -

1) AddNewPicStationTest::testMyTestCase
Current URL: http://localhost/upd8r_new/socialmedia/add_picstation
Screenshot: http://localhost/upd8r_new/tests/screenshots/692eb179f8146d2a8491442
68dd2a99a.png

object created
Failed asserting that false is true.

C:\xampplite\php\phpunit:46

FAILURES!
Tests: 1, Assertions: 1, Errors: 1.

2 个答案:

答案 0 :(得分:0)

我不知道您使用哪种PHP绑定,但通常要做的就是这(伪代码):

// if element is NOT present, try to wait a little more until timeout
var targetTime = currentTime() + 5000; // 5 seconds from now
while(currentTime() < targetTime) {
    if (!isElementPresent("someLocator")) {
        wait(250);
    } else {
        break;
    }
}

那是因为您的元素很可能是异步加载的(通过AJAX),而waitForPageToLoad()无法知道发生了什么。它只是认为页面一直都是完全加载的。查看绑定是否具有名为waitForElementPresent()或类似的方法。否则,实现上面的方法。

顺便说一句,Selenium 2(WebDriver)有Implicit wait选项可以自动为您执行此操作。如果找不到任何元素,它将在抛出异常之前尝试在指定的时间内查找它。


另一件可能错误的事情是查找的文本实际上隐藏在<iframe>元素中。如果是这种情况,则需要选择正确的框架。

答案 1 :(得分:0)

只是添加一些关闭 - 如果你看着这个问题并且在同样的问题上挣扎 - 我在Windows 7上使用selenium和phpunit。

更改waitForPageToload(1)没有做任何事情,所以我在代码中添加了sleep(1);,这样就可以让测试运行并正确传递