代码之家  ›  专栏  ›  技术社区  ›  Auto-learner

如何使用selenium webdriver和python等待并获取web元素的状态

  •  1
  • Auto-learner  · 技术社区  · 7 年前

    我正在检查 <td> 状态从更改的元素 "Running" "Success" . 状态更改可能需要大约1分钟,或者每隔几秒钟,我需要重试检查元素的状态。有人能帮助我如何实现这一点,以下是我正在尝试的html结构和代码片段。

    跑步

    <tbody id="workflows">
    <tr id="row8ff2244a64f3e7180164ff637c574d24" class="selected">
    <td><span class="wf-status running" id="status8ff2244a64f3e7180164ff637c574d24">Running</span></td>
    <td>Copy of Discovery v4madhu-test3-automate</td>
    <td>03 Aug 16:14</td>
    <td>autotest</td>
    <td>dmatarget14.hpeswlab.net</td>
    <td></td>
    <td></td>
    </tr>
    </tbody>
    

    成功

    <tbody id="workflows">
    <tr id="row8ff2244a64f3e7180164ff637c574d24" class="selected">
    <td><span class="wf-status wfsuccess" id="status8ff2244a64f3e7180164ff637c574d24">Success</span></td>
    <td>Copy of Discovery v4madhu-test3-automate</td>
    <td>03 Aug 16:14</td>
    <td>autotest</td>
    <td>dmatarget14.hpeswlab.net</td>
    <td></td>
    <td></td>
    </tr>
    </tbody>
    

    示例代码

    timeout = 60
    maxtime = time.time() + timeout
    result = None
    while result is "SUCCESS":
        try:
            # connect
            result = driver.find_element_by_xpath('//td[contains,"dmatarget14.hpeswlab.net"] and td[contains,"Success"]/ancestor::tr')
            time.sleep(5)
        except:
            if time.time() > maxtime:
                raise Exception
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   Andersson    7 年前

    您可以应用以下解决方案:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    timeout = 60
    
    WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.XPATH, '//tbody[@id="workflows"]//td[.="Success"]')))
    

    此代码应允许您等待 60 秒后返回 True 一旦 td 带文本 Success 出现在DOM或 TimeoutException 以防60秒后没有元素出现

        2
  •  0
  •   Hamza Torjmen    7 年前

    您可以尝试以下代码:

    WebDriverWait(driver, 60).until(
        EC.presence_of_element_located((By.XPATH, '//td[contains,"dmatarget14.hpeswlab.net"] and td[contains,"Success"]/ancestor::tr'))
    
        3
  •  0
  •   undetected Selenium    7 年前

    验证 <td> 要更改文本的元素 跑步 成功 您可以使用以下任一解决方案:

    • text_to_be_present_in_element CSS_SELECTOR :

      element = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "tbody#workflows>tr.selected>td>span.wf-status.wfsuccess"), "Success"))
      
    • text_to_be_present_in_element_value CSS选择器 :

      element = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, "tbody#workflows>tr.selected>td>span.wf-status.wfsuccess"), "Success"))