我正在练习使用Webdriver进行基本测试,此具体测试是通过Gmail发送电子邮件,然后声明已收到。
我正在使用新版Gmail,其中撰写电子邮件按钮会异步弹出一个窗口(参见图片)。要访问电子邮件正文以输入消息,我必须选择iframe,但我无法切换并访问“发送”按钮元素。
没有其他明显的框架可以保存“发送”按钮,并且使用driver.switch_to_default_content()也不会执行任何操作。我已经在下面提供了一段代码。
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()
收到要发送的邮件,但是想知道如何访问“发送”按钮点击它以便我的理智:)
答案 0 :(得分: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)