Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 2:如何选择没有id和名称的iframe?_Selenium_Phpunit_Selenium Webdriver - Fatal编程技术网

PHPUnit-Selenium 2:如何选择没有id和名称的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 --> ... </

我试图选择一个带有PHPUnit Selenium的iframe,但不知怎么的,它似乎不起作用。代码如下:

<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'));