【问题标题】:How to click on the popup element in chrome using Selenium and Python如何使用 Selenium 和 Python 在 chrome 中单击弹出元素
【发布时间】:2019-05-03 00:37:28
【问题描述】:

在测试我的自动化代码期间,我遇到了一个糟糕的网页。

当我单击一个元素时,页面会显示新的浏览器窗口并发出警报。

在那之后,我什么都做不了,因为警报是无敌的。

我该怎么办?

我的环境如下:

  • Python 3.6.7
  • 硒 3.141.0

请试试这个。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.kebhana.com/foreign/index.do')

el = driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div[2]/div/div/ul/li[21]/ul/li[2]/ul/li[4]/a')
driver.execute_script("arguments[0].click();",el)

然后,您可以看到一个带有警报的新浏览器窗口。

我找不到任何解决方案来消除该警报。

如果你有一些绝妙的方法来处理警报,请告诉我。

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    这是切换到新窗口然后接受警报的逻辑。

    # this will switch to the new window
    driver.switch_to.window(driver.window_handles[-1])
    # now accept the alert
    driver.switch_to.alert.accept()
    

    【讨论】:

    • switch_to.alert.accept() 不适用于这种情况。 :(
    【解决方案2】:

    元素是一个层消息,是HTML DOM 的一部分,要定位和单击/关闭元素,您必须为element_to_be_clickable() 诱导WebDriverWait您可以使用以下任一解决方案:

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#opbLayerMessage0_OK[href$='HanaBank']"))).click()
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='opbLayerMessage0_OK' and contains(@href, 'HanaBank')]"))).click()
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

    • 抱歉评论晚了,我要处理的不是"//a[@id='opbLayerMessage0_OK' and contains(@href, 'HanaBank')]"driver.execute_script("arguments[0].click();",el)之后新窗口上的浏览器警报
    猜你喜欢
    • 2022-11-01
    • 2021-03-31
    • 1970-01-01
    • 2021-12-28
    • 2021-12-09
    • 2017-11-23
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多