Selenium python如何关闭弹出窗口?

时间:2014-02-23 00:37:57

标签: python selenium

情景:

  • 点击顶部导航栏中的登录链接。
  • 这会打开一个叠加表单(弹出)
  • 我填写电子邮件ID并选择单选按钮(新客户)
  • 点击提交
  • 新的重叠表单(弹出窗口打开)
  • I输入所有信息(名字,姓氏等),然后点击提交
  • 覆盖(弹出窗体)打开,显示一条感谢信息。

问题: - 我想点击此弹出窗口右上角的“X”关闭它。

尝试了以下 Xpath:

browser.find_elements_by_xpath('html/body/div[7]/div[1]/a/span').click()

这会出错

Traceback (most recent call last):
File "C:\Python27\Off5th_Registration", line 25, in <module>
browser.find_elements_by_xpath('html/body/div[7]/div[1]/a/span').click()
AttributeError: 'list' object has no attribute 'click'

通过班级名称

browser.find_element_by_class_name('ui-dialog-titlebar-close ui-corner-all').click()

这会出错

Traceback (most recent call last):
File "C:\Python27\Off5th_Registration", line 25, in <module>
browser.find_element_by_class_name('ui-dialog-titlebar-close ui-corner-all').click()
File "C:\Python27\lib\selenium\webdriver\remote\webdriver.py", line 341, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "C:\Python27\lib\selenium\webdriver\remote\webdriver.py", line 681, in find_element
{'using': by, 'value': value})['value']

请帮助!!

1 个答案:

答案 0 :(得分:0)

首先,您使用的是find_elements_by_xpath,这会返回一个元素列表,您应该使用find_element_by_xpath(注意非复数形式)。

其次,我不确定你的xpath是否正确,虽然我不确定,但我记得从某个地方你必须使用完整的xpath(以//或/开头)。所以在你的情况下,'//html/body/div[7]/div[1]/a/span'

第三,不支持复合类名,在webdriver上下文中,这意味着如果您的类名中有空格,则不能选择by_class_name。

无论如何,请尝试以下方法:

browser.find_element_by_xpath('//a[@class=\"ui-dialog-titlebar-close ui-corner-all\"]').click()

编辑回答你的评论: 也许你来得太快了?尝试:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

    element = WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPath, '//a[@class=\"ui-dialog-titlebar-close ui-corner-all\"]')))

Check here.