Selenium Web Driver:php-webdriver-bindings的findElementsBy()函数返回错误

时间:2013-02-20 17:13:18

标签: php selenium phpunit selenium-webdriver

我正在编写自动生成的代码,例如google搜索帮助,并尝试将该自动生成的下拉列表的值打印为输出。

在selenium WebDriver中捕获多个与xpath定位符匹配的元素,我们必须使用findElementsBy()函数,

我写的代码如下:

<?php 
require_once 'www/library/phpwebdriver/WebDriver.php';
class PHPWebDriverTest extends PHPUnit_Framework_TestCase {
 protected $webdriver;

    protected function setUp() {
        $this->webdriver = new WebDriver("localhost", 4444);
        $this->webdriver->connect("firefox");
    }

    protected function tearDown() {
    //    $this->webdriver->close();
    }
    public function testgooglesearch() {                          
    $this->webdriver->get("http://google.com");
    $element=$this->webdriver->findElementBy(LocatorStrategy::name, "q");           
    $element->sendKeys(array("selenium" ) );
    $result=$this->webdriver->findElementsBy(LocatorStrategy::xpath,"//*[@id=\'gsr\']/table/tbody/tr/td[2]/table/tbody/tr[*]/td/");
    echo $countresult=count($result);

    }
}
?>

根据绑定findElementsBy()函数将假设返回一个数组。所以,当我试图计算数组长度时,错误正在返回。

错误:尝试获取非对象的属性。

任何人都可以帮助我如何继续。

2 个答案:

答案 0 :(得分:6)

At Last我能够自己找到问题的解决方案。

我的主要座右铭是打印自动生成下拉列表的值

主要问题是测试的运行速度。由于测试速度很快,因此“findElementsBy”功能无法正常工作。

所以我在该函数之前使用了sleep命令,以便它可以正常工作。

下面给出了适合我的代码

<?php
require_once "/phpwebdriver/WebDriver.php";
class WebdriverTest extends PHPUnit_Framework_TestCase

{
  protected $webdriver;

  protected function setUp()
  {   

$this->webdriver=new WebDriver("localhost", 4444);

    $this->webdriver->connect("firefox");
  }

   protected function tearDown() {
      $this->webdriver->close();
    }

  public function testSearch()
  {
    $this->webdriver->get("http://google.com");         

       $element=$this->webdriver->findElementBy(LocatorStrategy::name,"q");
    $element->sendKeys(array("selenium" ) );

sleep(2);
    $result=$this->webdriver->findElementsBy(LocatorStrategy::xpath,"//td[@class='gssb_a gbqfsf']");
    $countresult=count($result);
    echo "Records Count = ". $countresult ."\n";
        $x=1;
    $y=0;
    echo "\n";
     while($y<$countresult)
      {
        $output=$result[$y]->getText();
    echo $output."\n";
         $x++;
         $y++;
       }

    $r=$this->webdriver->findElementBy(LocatorStrategy::xpath,"//div[@class='gbqlca']");
    $r->click();



    }



}
?>

答案 1 :(得分:0)

这可能对你有用。

点击here

仅供参考:以上实施是在java-selenium绑定中。