【问题标题】:Python Selenium - Checkbox Is Not Clicked With Explicit WaitPython Selenium - 未通过显式等待单击复选框
【发布时间】:2021-01-24 16:32:37
【问题描述】:

H,我正在尝试点击下面的复选框。

<thead class="ant-table-thead" xpath="1">
  <tr>
    <th class="ant-table-selection-column"><span class="ant-table-header-column"><div><span class="ant-table-column-title"><div class="ant-table-selection"><label class="ant-checkbox-wrapper"><span class="ant-checkbox"><input type="checkbox" class="ant-checkbox-input" value=""><span class="ant-checkbox-inner"></span></span>
      </label>
      </div>
      </span><span class="ant-table-column-sorter"></span></div>
      </span>
    </th>

 
  </tr>
</thead>

它会立即被点击,如下所示:

Checkbox = "//thead/tr[1]/th[1]/span[1]/div[1]/span[1]/div[1]/label[1]/span[1]/input[1]"
driver.find_element_by_xpath(Checkbox).click()

但是,当我尝试添加显式等待时,复选框不会被点击

if WebDriverWait(driver, 30).until(
                    EC.element_to_be_clickable((By.XPATH, Checkbox))): driver.find_element_by_xpath(
                        Checkbox).click()

我也试过EC.visibility_of_element_located,但也没用

提前感谢您的帮助

【问题讨论】:

  • 您的问题到底是什么?代码失败是因为复选框最初不可点击吗?

标签: python selenium-webdriver xpath css-selectors webdriverwait


【解决方案1】:

查看您的代码和我认为我想通的文档,我无法重现以进行测试,但我会尝试解释为什么不起作用:

来自doc

from selenium.common.exceptions import TimeoutException
    try:
        element = WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH, Checkbox))

        driver.find_element_by_xpath(Checkbox).click()
    except TimeoutException as ex :
        
        *put here the "else" code, it will be execute if the wait ends with no Checkbox found so the WebDriver will Throw a TimeoutException*

【讨论】:

    【解决方案2】:

    点击元素需要诱导WebDriverWaitelement_to_be_clickable(),可以使用以下Locator Strategies之一:

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "thead.ant-table-thead input.ant-checkbox-input"))).click()
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//thead[@class='ant-table-thead']//input[@class='ant-checkbox-input']"))).click()
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

    • 我已经这样做了,但是当使用 webdriver wait 时元素没有被点击
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2017-09-24
    • 2021-12-11
    • 1970-01-01
    • 2019-02-18
    • 2019-10-10
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多