webdriver.io 无法为 iframe 禁用同源策略

Posted

技术标签:

【中文标题】webdriver.io 无法为 iframe 禁用同源策略【英文标题】:webdriver.io can't disable same-origin-policy for iframe 【发布时间】:2017-12-27 10:58:48 【问题描述】:

我需要为我的自动测试禁用同源策略。 我在 Ubuntu 16.04 上使用 webdriver.io + selenium 独立服务器 + chromedriver。 我需要从具有与页面域不同的域的 iframe 获取标题。 我已经阅读了这个主题并在我的代码中使用了答案,但它似乎不起作用/ Disable same origin policy in Chrome.

我的代码: wdio.conf.js 的一部分

capabilities: [
        maxInstances: 5,
        browserName: 'chrome',
        chromeOptions : 
            args: ["--disable-web-security", "--user-data-dir:path/to/profile"]
        
    ],

我在规范中获取 iframe 标题的部分代码:

it('step' , function() 
  var iframeValue = browser.element('#iframe_id').value;
  browser.frame(iframeValue);
  browser.waitForExist('title'); //or any element inside head or body
  browser.getTitle(); //returns page title, not iframe
  browser.element('title').getText(); //returns ''
  browser.element('title').gethtml(); //returns '<title>iframe title</title>'     
);

我已经重新启动 selenium 服务器,重新启动测试,使用 browser.debug() 检查 iframe 是否是活动元素,检查配置文件 --user-data-dir 参数是否有效。 webdriver.io 是否可能无法从 iframe 获取值或 --disable-web-security 根本不起作用?

更新: iframe 的结构:

<iframe src="http://www.example.com" id="iframe_id"></iframe>
    #document
    <html>
    <head>
        <title>iframe title</title>
    </head>
    <body>
        <div>
            <!--content-->
        </div>
    </body>
    </html>

【问题讨论】:

【参考方案1】:

我不明白你想做什么,但如果你这样做

browser.getHTML('html').then(function(data) 
// match something from data with regex

您可以使用正则表达式匹配您搜索的所有内容。如果您不是废弃一个随机网站并且您可以访问该文档,那么只需添加一个类。然后你可以在你创建的类上制作 .getHTML 或 .getText 。但是,如果您在“html”上创建 .getHTML,那么您将获得文档的完整 html,这意味着您可以在源代码中看到的所有内容。

【讨论】:

以上是关于webdriver.io 无法为 iframe 禁用同源策略的主要内容,如果未能解决你的问题,请参考以下文章

如何等待 WEBdriver.io 的 Ajax 调用完成

禁用以另一个闪亮输入为条件的闪亮输入

Webdriver.io。用CTRL突出显示多个元素,然后单击咖啡符号

Selenium & webdriver.io 如何使用 executeScript?

Webdriver.io - 如何在配置中使用 beforeEach 钩子

如何同步运行webdriver.io?