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

2024-05-06 20:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图检查<td>元素的状态,该元素的状态从"Running"更改为{}。状态更改可能需要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>

成功

^{pr2}$

示例代码

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

Tags: 代码id元素nettime状态resultrunning
3条回答

您可以尝试以下代码:

WebDriverWait(driver, 60).until(
    EC.presence_of_element_located((By.XPATH, '//td[contains,"dmatarget14.hpeswlab.net"] and td[contains,"Success"]/ancestor::tr'))

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

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中,或者在60秒后没有元素出现的情况下返回True

要验证<td>元素的状态以将文本从正在运行更改为成功,可以使用以下任一解决方案:

  • text_to_be_present_in_element和{}:

    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和{}:

    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"))
    

相关问题 更多 >