我正在使用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.
答案 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);
,这样就可以让测试运行并正确传递