PHPUnit-Selenium 2:如何选择没有id和名称的iframe?
我试图选择一个带有PHPUnit Selenium的iframe,但不知怎么的,它似乎不起作用。代码如下:PHPUnit-Selenium 2:如何选择没有id和名称的iframe?,selenium,phpunit,selenium-webdriver,Selenium,Phpunit,Selenium Webdriver,我试图选择一个带有PHPUnit Selenium的iframe,但不知怎么的,它似乎不起作用。代码如下: <body> ... <div id="container"> <iframe src="x.html"> <html> ... <body></body> <!-- this is the body I would like to get --> ... </
<body>
...
<div id="container">
<iframe src="x.html">
<html>
...
<body></body> <!-- this is the body I would like to get -->
...
</html>
</iframe>
</div>
...
</body>
你知道为什么吗?你可以使用下面的方法切换到使用索引的帧。要切换到网页中的第一帧,我们可以使用以下方法
public function switchToIFrame($index = 0) {
$this->session->getDriver()->switchToIFrame($index);
}
您可以使用下面的方法切换到使用其索引的帧。要切换到网页中的第一帧,我们可以使用以下方法
public function switchToIFrame($index = 0) {
$this->session->getDriver()->switchToIFrame($index);
}
为iframe提供一些id或名称,并使用下面的代码,它将工作
$this->frame('id/name');
$this->byCssSelector('body')->text('test');
如果有多个iframe,则将值赋值为null并根据层次结构(父级->子级->依此类推)开始获取
为iframe提供一些id或名称,并使用下面的代码,它将工作
$this->frame('id/name');
$this->byCssSelector('body')->text('test');
如果有多个iframe,则将值赋值为null并根据层次结构(父级->子级->依此类推)开始获取
同样的问题,我的解决方法是执行一个javascript,该javascript将迭代所有的iframe标记,然后通过其现有属性确定要定位的iframe,然后将您自己的属性设置为唯一标识符
$this->execute(array(
'script' => "
var myiFrames = document.getElementsByTagName('iframe');
for(var i=0; i<=myiFrames.length; i++)
{
//determine iframe by src which may contain 'test' str
if( myiFrames[i].getAttribute('src').search('test')>=0 ){
myiFrames[i].setAttribute('myCustomId', 'myTargetFrame')
}
}",
'args' => array()
));
同样的问题,我的解决方法是执行一个javascript,该javascript将迭代所有的iframe标记,然后通过其现有属性确定要定位的iframe,然后将您自己的属性设置为唯一标识符
$this->execute(array(
'script' => "
var myiFrames = document.getElementsByTagName('iframe');
for(var i=0; i<=myiFrames.length; i++)
{
//determine iframe by src which may contain 'test' str
if( myiFrames[i].getAttribute('src').search('test')>=0 ){
myiFrames[i].setAttribute('myCustomId', 'myTargetFrame')
}
}",
'args' => array()
));
我得到一个错误:PHP致命错误:调用非对象上的成员函数getDriver()——似乎会话不存在,我不喜欢PHP。基本上我来自Java背景。Java中有一个函数名为
driver.switchTo().frame(0)代码>希望PHP中应该有一个等价的方法。我从Google得到了上面的解决方案。好吧,我猜等价的函数应该是$this->frame($index),但这也不起作用。无论如何感谢您的帮助:)如果您使用的是SeleniumHP绑定,您可以打开绑定文件并检查确切的函数名。我收到一个错误:PHP致命错误:调用非对象上的成员函数getDriver()-似乎会话不存在。我不喜欢PHP。基本上我来自Java背景。Java中有一个函数名为driver.switchTo().frame(0)代码>希望PHP中应该有一个等价的方法。我从Google得到了上面的解决方案。好吧,我猜等价的函数应该是$this->frame($index),但这也不起作用。感谢您的帮助:)如果您使用的是SeleniumHP绑定,您可以打开绑定文件并检查确切的函数名。
$myframe = $this->byXPath("//*[@myCustomId='myTargetFrame']");
$this->frame($frame->attribute('id'));