Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Ruby 如何使用selenium webdriver了解当前帧_Ruby_Selenium Webdriver - Fatal编程技术网

Ruby 如何使用selenium webdriver了解当前帧

Ruby 如何使用selenium webdriver了解当前帧,ruby,selenium-webdriver,Ruby,Selenium Webdriver,我有这样的代码 require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox f = driver.find_element :xpath, "html/frameset//frame[@name='header']" driver.switch_to.frame f 切换帧后,是否有方法访问当前帧的属性? 换句话说,切换后如何获取frame标记的属性name的值 我想在做某事之前确保我处理的帧是正确的。我认为您无

我有这样的代码

require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
f = driver.find_element :xpath, "html/frameset//frame[@name='header']"
driver.switch_to.frame f
切换帧后,是否有方法访问当前帧的属性? 换句话说,切换后如何获取
frame
标记的属性
name
的值


我想在做某事之前确保我处理的帧是正确的。

我认为您无法访问当前
iframe
的属性


我建议测试
iframe

中是否存在元素,该元素在2012年被正式请求并拒绝,如下所示:

回答者声称这被拒绝,因为您可以使用此(Java)代码来完成相同的事情:

WebElement el = (WebElement) ((JavascriptExecutor) driver).executeScript("return window.frameElement");
就我个人而言,这给我的印象是一个愚蠢的答案——Selenium的整个
JavascriptExecutor
部分看起来就像是一个丑陋的黑客,允许最终用户做开发人员没有预料到的事情。除了开发者被明确告知需要这样做,他们忽略了这一点

无论如何,我正在使用Python,它允许将其他方法动态添加到现有类中(即使是您无权访问的类),因此我只使用以下方法为WebDriver提供了一个
currentFrame
方法:

from selenium.webdriver.remote.webdriver import WebDriver

def currentFrame(self):
    return str(self.execute_script("""
        var frame = window.frameElement;
        if (!frame) {
            return 'root of window named ' + document.title;
        }
        var ret   = '<' + frame.tagName;
        if (frame.name) {
            ret += ' name=' + frame.name;
        }
        if (frame.id) {
            ret += ' id=' + frame.id;
        }
        return ret + '>';
        """))

WebDriver.currentFrame = currentFrame
从selenium.webdriver.remote.webdriver导入webdriver
def当前帧(自身):
返回str(self.execute_脚本(“”)
var frame=window.frameElement;
如果(!帧){
返回'root of window named'+document.title;
}
var-ret='';
"""))
WebDriver.currentFrame=currentFrame
(我只是出于调试/日志记录的目的使用它-我实际上不需要WebElement,所以我只是返回一个字符串。我不知道Ruby,但我相信您可以采用我的Python代码或我从其他网站复制的Java代码,以使其在Ruby中工作。)