2013-05-22 107 views
2

我正在與Webdriver一起練習運行基本測試,此特定測試是通過Gmail發送電子郵件,然後聲明它已被接收。在WebDriver中切換到iframe後在默認內容中訪問元素

我使用Gmail的新版本,其中撰寫電子郵件按鈕異步彈出一個窗口(請參見圖片)。要訪問電子郵件的主體以鍵入消息,我必須選擇iframe,但是我無法切換並訪問「發送」按鈕元素。

沒有其他值得注意的幀來保存「發送」按鈕,並且使用driver.switch_to_default_content()也不會執行任何操作。我已經包含下面的代碼片段。

driver.find_element_by_name("to").clear() 
driver.find_element_by_name("to").send_keys("[email protected]") 
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()派,而是想弄清楚如何訪問「發送」按鈕,點擊它,我的理智:)

gmailEmail

着想
+0

我只是在這裏必須指出的是,儘可能學習去的webdriver使用的Web應用程序,Gmail是一個引人注目[糟糕的選擇(https://groups.google.com/d/msg/selenium-users/8jR6Fw5ndxU/7peVDuzkNN4J) – JimEvans

回答

0

我對每個測試運行具有不同id的元素的解決方法是使用regexp解析頁面源以提取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)