【问题标题】:Frame handling in Webdriver IOWebdriver IO 中的帧处理
【发布时间】:2015-07-16 21:15:28
【问题描述】:

我正在测试一个包含多个表单的网页。

当我使用时

client.frame({id:client.element('#frameId')});

我没有收到任何错误,但是当我尝试与该框架内的元素交互时,我收到 RuntimeError 告诉我无法找到该元素。

我一直在寻找有关 frame() 方法如何工作的文献,但我没有任何运气。

【问题讨论】:

    标签: javascript testing selenium automated-tests webdriver-io


    【解决方案1】:

    我也在使用 webdriver.io,看起来文档有点错误。

    您可以访问框架:

    1) 通过它在页面上的编号。例如,在 HTML DOM 中遇到的第一帧是 client.frame(0),第二个 client.frame(1)

    2) 通过名称属性: <frame name="test"></frame> client.frame('test')

    3) 找到client.element('css_selector')的元素,然后在回调中将返回值传递给.frame()

    【讨论】:

    • 不知何故,这两种技术都不起作用。我的 iframe 在 div 中。我希望这不会造成任何问题。
    【解决方案2】:

    进入新框架的方法是:

    client.frame(<id of frame here>)
    

    你所拥有的也应该可以工作。尝试对仅存在于框架上的元素执行client.waitForExist,而不是仅仅切换到框架并立即尝试与该框架中的元素交互,因为您可能在 selenium 有机会完全切换之前触发交互事件到框架:

    client.frame(<id of frame here>
    client.waitForExist(<id of some css element that only exists in the frame>)
    

    【讨论】:

      【解决方案3】:

      client.frame(&lt;name_of_frame&gt;) 工作。

      我尝试使用像 #idOfSelector 这样的选择器,但它似乎不起作用。

      【讨论】:

        【解决方案4】:

        这对我有用

        const frameValue = browser.element('frame_selector').value;
        browser.frame(frameValue);
        

        希望它对你有用。

        【讨论】:

        • 2015 年 5 月(问题日期)webdriverio v2.4.5 是最新的。我可以确认此答案适用于 v4.14.2。
        猜你喜欢
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多