Webdriver IO 中的帧处理

Frame handling in Webdriver IO

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

当我使用

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

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

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

我也在用 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()

进入新帧的方法是:

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

client.frame(<name_of_frame>) 有效。

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

这对我有用

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

希望它对你有用。