多iframe标记的硒的webdriver(Multiple iframe tags Seleniu

2019-09-29 08:57发布

我试图用硒发送信用卡信息到一个站点,每个元素都包含在HTML一个独立的iframe标签。 例如,输入信用卡号码框被包含在第一个iframe标签,以及持卡人姓名被包含在第二iFrame,等等,等等。 我能够访问第一个iframe标签,并发送信用卡号入禁区,但是我一个无法找到持卡人姓名iframe标记,因而无法发送键输入持卡人姓名。 我不知道是否有一种方法,以专门为第二(或小于第一元件之外的任意数)与webdriver的iframe标签搜索。

下面是我使用的代码:

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
cc = driver.find_element_by_id("number")
cc.send_keys(credit_card_number)

这正确地找到其中包含字段中输入一个卡号第一个iframe标签,并发送相应的键

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
driver.find_element_by_id("name").send_keys(cc_name)

这导致下面的错误:消息:没有这样的元件:无法找到元素:{“方法”:“标签名称”,“选择器”:“IFRAME”}

Answer 1:

你已经正确地发现了包含信用卡号码字段输入卡号第一个iframe标签 ,并发送相应的按键。 展望未来,当你想发送相应的键,你必须是相关的框架上第一卡持有人名称字段。 所以,你必须切换回immedediate parent_frame()既包含的iframe标签 ,即第一iframe第二iFrame和明年尝试切换到第二个iframe来查找持卡人姓名字段,如下所示:

# as there are multiple frames so find_element_by_tag_name("iframe") will not suffice and have to use unique css/xpath
driver.switch_to.frame(driver.find_element_by_xpath("xpath_of_iframe1"))
cc = driver.find_element_by_id("number")
cc.send_keys(credit_card_number)
driver.switch_to.default_content() #incase iframe1 and iframe2 are immediate child of the Top Level Content
driver.switch_to.frame(driver.find_element_by_xpath("xpath_of_iframe2"))
cc = driver.find_element_by_id("name")
cc.send_keys(cc_name)

:根据最佳做法,你不应该通过检测帧find_element_by_tag_name("iframe")多的inpresence <iframe>标签上的网页。 最好的办法是使用任何框架名帧ID帧索引 。 你可以找到在详细讨论如何选择一个HTML元素无论是在什么样的硒框架? 。



Answer 2:

切换到第一个IFRAME后,你要切换回默认的上下文(包含多个iframe的主页),然后切换到下一个iframe中。

所以,你的伪代码看起来应该像

driver.switch_to.frame(driver.find_element_by_tag_name("iframe_1"))
driver.switch_to.defaultContent()
driver.switch_to.frame(driver.find_element_by_tag_name("iframe_2"))
driver.switch_to.defaultContent()
& so on


文章来源: Multiple iframe tags Selenium webdriver