Php Selenium webdriver循环错误:ObsoleteElementWebDriverError

Php Selenium webdriver循环错误:ObsoleteElementWebDriverError,php,selenium,webdriver,phpunit,Php,Selenium,Webdriver,Phpunit,我目前正在创建一个单元测试,该测试将使用Selenium和。我正在尝试浏览所有超链接,并使用以下代码验证它们是否正常工作: $this->webDriver->get($this->url); $results = $this->webDriver->findElements(WebDriverBy::cssSelector('a')); for($i = 0; $i < count($results); $i++) {

我目前正在创建一个单元测试,该测试将使用Selenium和。我正在尝试浏览所有超链接,并使用以下代码验证它们是否正常工作:

$this->webDriver->get($this->url);
    $results = $this->webDriver->findElements(WebDriverBy::cssSelector('a'));

    for($i = 0; $i < count($results); $i++)
    {
        $this->webDriver->get($results[$i]->getAttribute('href'));
        echo $this->webDriver->getTitle() . "\n";
        $this->webDriver->navigate()->back();
    }

例如,当我不从页面切换时,当我只是在整个循环中重复标题时,它会完美地循环。但一旦我添加了一个动作,它就会停止工作。我尝试过实现“wait”,但没有任何运气,它仍然抛出相同的错误。此外,只要运行一次,而不是循环,代码就可以完美地工作。。我似乎想不出来,已经嚼了几个小时了。。您有什么想法吗?

您可以在加载其他页面之前保留HREF

$this->webDriver->get($this->url);

$results = $this->webDriver->findElements(WebDriverBy::cssSelector('a'));
$hrefs = array();
for($i = 0; $i < count($results); $i++)
{
    $hrefs[] = $results[$i]->getAttribute('href');
}

for($i = 0; $i < count($hrefs); $i++)
{
    $this->webDriver->get($hrefs[$i]);
    echo $this->webDriver->getTitle() . "\n";
    $this->webDriver->navigate()->back();
}
$this->webDriver->get($this->url);
$results=$this->webDriver->findElements(WebDriverBy::cssSelector('a');
$hrefs=array();
对于($i=0;$igetAttribute('href');
}
对于($i=0;$iwebDriver->get($hrefs[$i]);
echo$this->webDriver->getTitle()。“\n”;
$this->webDriver->navigate()->back();
}

此外,不需要使用
navigate()->back()

我相信
obsletelementwebdriverelation
错误与
陈旧元素异常类似。因此,当您列出要访问的链接时,当您导航回起始页时,您将重新加载该页。这意味着您的元素引用列表将不再有效。您需要在循环开始时以及循环之外重新创建列表。
$this->webDriver->get($this->url);

$results = $this->webDriver->findElements(WebDriverBy::cssSelector('a'));
$hrefs = array();
for($i = 0; $i < count($results); $i++)
{
    $hrefs[] = $results[$i]->getAttribute('href');
}

for($i = 0; $i < count($hrefs); $i++)
{
    $this->webDriver->get($hrefs[$i]);
    echo $this->webDriver->getTitle() . "\n";
    $this->webDriver->navigate()->back();
}