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);
希望它对你有用。
我正在测试一个包含多个表单的网页。
当我使用
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);
希望它对你有用。