首页 > 解决方案 > 我的 WebDriverWait 返回一个“dict”而不是所需的元素

问题描述

我想使用 Selenium 和 Gauge 从网页中获取数据。我编写了以下代码,使用wait_for_element

from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from step_impl.mixins.exception import MixinException

class MixinSelector(MixinException):

    def __init__(self, driver=None):
        super(MixinSelector, self).__init__(driver)
        self.wait_for_element_time = 60

    def wait_for_elem(self, by, locator_string):
        try:
            element = WebDriverWait(self.driver,self.wait_for_element_time)
                      .until(EC.presence_of_element_located((by, 
                       locator_string)))
            print(element)
            print(type(element))  
            return element
        except TimeoutException:
            self.fail_test('failed')
        except:
            raise

但是,这会产生一个dict实例,如 debug 所示print

{'ELEMENT': '0.8884832448581164-1'}
<class 'dict'>

我这样调用函数:

self.wait_for_elem(By.CSS_SELECTOR, '#baseWebLayoutContainerID')

这是一个问题,因为我需要将结果作为可以在其他几个功能中使用的 Web 元素。我怎样才能得到这个结果?

标签: pythonselenium-webdriverwebdriverwait

解决方案


不要期望 Web 元素从 WebDriverWait 中返回,而是在 WebDriverWait 之后放置另一行来获取 Web 元素,请参见下面的代码

WebDriverWait(driver, 10).until(EC.presence_of_element_located((by, locator_string)))
element = driver.find_element(by, locator_string) 
return element

如下图所示,它对我来说很好用

在此处输入图像描述


推荐阅读