【问题标题】:Access element in default content after switching to iframe in WebDriver在 WebDriver 中切换到 iframe 后访问默认内容中的元素
【发布时间】:2013-05-22 00:56:01
【问题描述】:

我正在用 Webdriver 练习运行基本测试,而这个特定的测试是通过 Gmail 发送一封电子邮件,然后断言它已被接收。

我正在使用新版本的 Gmail,其中撰写电子邮件按钮会异步弹出一个窗口(见图)。要访问电子邮件正文以键入消息,我必须选择 iframe,但随后无法切换并访问“发送”按钮元素。

没有其他明显的帧持有“发送”按钮,并且使用 driver.switch_to_default_content() 也没有做任何事情。我已经包含了下面代码的 sn-p。

driver.find_element_by_name("to").clear()
driver.find_element_by_name("to").send_keys("toemailaddy@gmail.com")
localtime = time.asctime( time.localtime(time.time()) )
subj = ("TEST - " + localtime)
print(subj)
driver.find_element_by_name("subjectbox").clear()
driver.find_element_by_name("subjectbox").send_keys(subj)
body = ("TEST")
bodyFrame = driver.find_element_by_xpath("//td[@class='Ap']//iframe")
driver.switch_to_frame(bodyFrame)
driver.find_element_by_xpath("//body[@role='textbox']").clear()
driver.find_element_by_xpath("//body[@role='textbox']").send_keys(body)
driver.find_element_by_xpath("/div[@role='button' and contains(text(), 'Send')]").click()
driver.find_element_by_link_text("Inbox (1)").click()

我可以使用ActionChains send_keys(Keys.CONTROL, Keys,ENTER).perform() 获取要发送的消息,但为了我的理智,我想知道如何访问“发送”按钮以单击它:)

【问题讨论】:

  • 这里我必须指出,就使用 Web 应用程序学习 WebDriver 而言,Gmail 是一个引人注目的 poor choice

标签: python selenium webdriver


【解决方案1】:

对于每次测试运行具有不同 id 的元素,我的解决方法是使用正则表达式解析页面源以提取 id。也许这不是最有效的解决方案,但它确实有效。

import re
pattern = "div id=\"(:\w+)\".*Send</div>"
xpath = ""
matchObj = re.search(pattern,driver.page_source)
if(type(matchObj)!=None):
    matchTuple = matchObj.groups()
    if(len(matchTuple)>0):
        xpath = "//*[@id=\"" + matchTuple[0] + "\"]"
print("SEND button xpath = " + xpath)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多