Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用PHPUnit、Selenium和phpwebdriver进行测试后保持登录状态_Php_Selenium_Selenium Webdriver_Phpunit - Fatal编程技术网

如何在使用PHPUnit、Selenium和phpwebdriver进行测试后保持登录状态

如何在使用PHPUnit、Selenium和phpwebdriver进行测试后保持登录状态,php,selenium,selenium-webdriver,phpunit,Php,Selenium,Selenium Webdriver,Phpunit,我正在尝试使用共享会话运行多个测试,从登录开始 <?php class ExampleTest extends PHPUnit_Framework_TestCase { /** * @var \RemoteWebDriver */ protected $webDriver; protected $host = 'http://localhost:4444/wd/hub'; protec

我正在尝试使用共享会话运行多个测试,从登录开始

   <?php

   class ExampleTest extends PHPUnit_Framework_TestCase {

       /**
        * @var \RemoteWebDriver
        */

       protected $webDriver;
       protected $host = 'http://localhost:4444/wd/hub';
       protected $browser = array (
         'browserName' => 'chrome',
         'sessionStrategy' => 'shared'
       );

       public function setUp()
       {
         $this->webDriver = RemoteWebDriver::create($this->host, $this->browser);
       }

       public function tearDown()
       {
         $this->webDriver->quit();
       }
然后,我想测试对表行的单击(基于行内的值):

不幸的是,我得到了以下错误:

   NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//td[contains(text(), 'TestPortal')]"}
我确信这是由于测试没有使用同一个会话(用户没有登录,因此无法访问/特许权页面),因为如果我在testLogin()函数中包含这两条指令,它可以正常工作

知道我做错了什么吗?我仍然希望能够使用这些“findElement(WebDriverBy::”东西


非常感谢!

我使用了Selenium,但我不熟悉PHP,这是tearDown()吗在每个测试之后执行还是在所有测试用例之后执行?

您的测试需要是独立的,这样您就可以毫无问题地运行其中一个测试。这意味着对于每个测试,您必须执行登录,完成自己的工作,然后注销。如果我能给您一个建议,请创建一个方法登录,您将在测试中使用它。在这个登录中方法,您将获取元素并与它们交互。

每次测试后。“一旦测试方法完成运行,无论成功与否,都会调用另一个名为tearDown()的模板方法”谢谢。你能解释一下为什么独立测试如此重要吗?因为我想测试整个平台,以了解哪些页面被破坏了。顺便说一句,为每个测试添加一个登录函数会使测试执行的时间更长。无论如何,非常感谢你的回答。有几个原因是(某种程度上)链接。首先,你必须能够在不运行其他测试的情况下运行每个测试。当你认为你想测试整个应用程序时,这可能会显得有点奇怪,但在将来,你可能需要进行快速测试,而不想运行所有测试。或者,假设一个测试因为一件小事而失败,你可能无法运行整个应用程序其他测试。当它们独立时,你可以测试整个应用程序并获得测试的实际结果。你仍然可以询问是否需要更多信息。看看那里-->。它可能与你想要创建的框架不完全相同,但它教会了你很多好的实践
   public function testFranchiseClick()
   {
     $this->webDriver->get('http://localhost:8888/public/franchises');
     $this->webDriver->findElement(WebDriverBy::xpath("//td[contains(text(), 'TestPortal')]"))->click();
   }
   NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//td[contains(text(), 'TestPortal')]"}