我试图选择一个元素,它驻留在一个iframe中,也可能驻留在其他iframe中。
是否可以在(python)selenium中的某个(子)iframe中选择一个元素,而不必事先选择iframe?是否有一种方法可以在每个iframe上“循环”并检查在哪里可以找到我的元素。。。?
在元素、html内容和iFrame可能即将加载的情况下,如何做到这一点。。。?
编写自己的递归查找器应该很容易。很抱歉,我不懂python,但在Java中,它可能类似于:
public void findInAllFrames(WebElement e, String targetIdStr) {
List<WebElement> l = e.findElements(By.tagName("iframe"));
for(int inx=0; inx<l.size(); inx++) {
List<WebElement> targets = l.get(inx).findElements(By.id(targetIdStr));
if(targets.size()>0) {
// Do something with your targets
}
findInAllFrames(l.get(inx), targetIdStr);
}
}
不,如果不切换到相应的iframe
,则无法通过Selenium
与iframe
中的任何WebElement
进行交互。
加载页面时,Selenium
的焦点默认保持在顶部窗口上。
顶部窗口
包含其他iframes
和框架集
。因此,当我们需要与iframe中的WebElement
交互时,我们必须通过以下提到的方法之一切换到相应的iframe
:
我们可以通过3种方式切换到帧。
按帧名称:
Name
iframe的属性,通过它我们可以切换到它。
例子:
driver.switch_to.frame("iframe_name")
按帧ID:
ID
iframe的属性,通过它我们可以切换到它。
例子:
driver.switch_to.frame("iframe_id")
按帧索引:
假设页面中有10个帧,我们可以使用索引切换到iframe。
例子:
driver.switch_to.frame(0)
driver.switch_to.frame(1)
切换回主框架:
我们可以使用
default_content()
或parent_frame()
切换回主框架
例子:
driver.switch_to.default_content()
driver.switch_to.parent_frame()
一个更好的方法来切换帧将诱导的可用性的预期帧的
expected_conditions
设置为frame_to_be_available_and_switch_to_it
如下:
>
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))
通过
帧名称
:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.NAME,"name_of_iframe"))
通过框架Xpath:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.XPATH,"xpath_of_iframe"))
通过
帧CSS
:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.CSS_SELECTOR,"css_of_iframe"))
您可以在以下网站找到相关的详细讨论:
iframe下#文档的处理方法
问题内容: 我正在尝试选择一个位于iframe中并且可能位于其他iframe中的元素。 是否可以在不选择iframe的情况下以某种方式在(python)selenium中的某个(sub)iframe中选择元素?有没有办法以某种方式“遍历”每个iframe并检查在哪里可以找到我的元素…? 以及在元素和html内容以及iframe可能只是被加载的情况下该怎么做…? 问题答案: 不 , 在不切换到各自的
我们的网站上有w2ui下拉元素,我想使用selenium IDE运行脚本进行测试,我记录了步骤,但在运行该脚本时出错(未找到元素)。有没有办法在Selenium IDE(特别是下拉列表)中处理w2ui元素。我尝试过xpath,仍然没有在下拉列表中选择值。
问题内容: 我使用的选择标记的格式允许多次选择,但我希望选择的最大数量为10。使用JavaScript或jquery是否可以? 提前致谢! 问题答案: 这是供您使用的一些完整代码…一定要喜欢Google AJAX API Playground :-) 编辑1: 注意:这只允许您选择5,因为我不想复制/粘贴另外10个选项:-)
问题内容: 我们选择带有Django 1.4测试和Selenium的元素,如下所示: (该类继承自)。 问题是有时有些元素没有文本,并且如果我们选择它,它就会失败(len为0)。如何选择没有文本的元素? 更新 :由于不起作用,我不得不断言两行以断言没有文本: 现在,我可以用一行声明相同的内容: 问题答案: 您可以使用XPath的 功能。
我在Selenium中找不到此网站上的复选框 我尝试过:Xpath、ID、类型、操作键、文本和部分文本。我已经能够发送密钥(用户和密码)并找到user/pass元素。 > #检查框-标签-边距 提前谢谢你的帮助,我觉得我好像在兜圈子。
https://imgur.com/vfhp8n7.png 当我单击B按钮时,整行隐藏 我需要硒来点击B按钮,然后点击下一个B按钮 我想执行,但是数字4352,6820每次都不一样 你有什么想法吗? 编辑