我无法理解如何使用“预期条件”来检查元素是否存在。鉴于此文档,根本不清楚如何使用它。我试过下面的代码
def _kernel_is_idle(self):
return EC.visibility_of_element_located((By.XPATH, '//*[@id="kernel_indicator_icon" and @title="Kernel Idle"]'))
Run Code Online (Sandbox Code Playgroud)
以检查元素(可作为类中的方法调用)的想法。有两件事没有任何意义:
根据文档(我必须查找源代码!),此方法应返回True或False。但是,它返回以下内容:
<selenium.webdriver.support.expected_conditions.visibility_of_element_located object at 0x110321b90>
Run Code Online (Sandbox Code Playgroud)如果没有 ,此功能如何工作webdriver?通常你总是有这样的电话
driver.do_something()
Run Code Online (Sandbox Code Playgroud)但是对于“预期条件”,webdriver 的参考在哪里?
看来你快到了。
里面Documentation明确说了以下几点:
class selenium.webdriver.support.expected_conditions.visibility_of_element_located(locator)
Run Code Online (Sandbox Code Playgroud)
其定义为:
期望检查元素是否存在于页面的 DOM 上并且可见。可见性意味着该元素不仅显示,而且高度和宽度都大于0。 locator - 用于查找元素
returns the WebElement once it is located and visible
因此,当你提到:
return EC.visibility_of_element_located((By.XPATH, '//*[@id="kernel_indicator_icon" and @title="Kernel Idle"]'))
Run Code Online (Sandbox Code Playgroud)
发现的WebElement返回如下:
<selenium.webdriver.support.expected_conditions.visibility_of_element_located object at 0x110321b90>
Run Code Online (Sandbox Code Playgroud)
甚至Source Code说的是一样的:
try:
return _element_if_visible(_find_element(driver, self.locator))
Run Code Online (Sandbox Code Playgroud)
当搜索不成功时:
except StaleElementReferenceException:
return False
Run Code Online (Sandbox Code Playgroud)
以更有条理的方式总结:
__call__()魔术方法的函数或类)预期条件应该在实例的until()方法中使用:WebDriverWait()
wait = WebDriverWait(driver, 10)
wait.until(<Expected_condition_here>)
Run Code Online (Sandbox Code Playgroud)预期条件的结果不一定是True/ False。结果将由WebDriverWait. 注意:WebElement实例是“真实的”。在此处阅读有关 Python 真实性的更多信息
当预期条件返回一个WebElement实例时,这是非常方便的。它允许立即链接到一个元素,而无需再次找到它:
button = wait.until(EC.element_to_be_clickable((By.ID, "my_id")))
button.click()
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
9684 次 |
| 最近记录: |