Selenium明确的等待不起作用

时间:2017-10-04 17:37:39

标签: python selenium selenium-webdriver selenium-chromedriver

我有一个代码告诉Selenium等到元素可点击但由于某种原因,Selenium不会等待,而是单击该元素并立即在点(x,y)处引发Not clickable。知道如何解决这个问题吗?

x = '//*[@id="arrow-r"]/i'
driver = webdriver.Chrome(path)
driver.get('https://www.inc.com/inc5000/list/2017')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, x)))
driver.find_element_by_xpath(x).click()

2 个答案:

答案 0 :(得分:1)

EC.element_to_be_clickable检查元素是否可见并启用。在可见性方面,它不包括元素落后于其他方面的情况。也许你的页面使用像blockUI widget这样的东西,并且在封面消失之前会发生click()。您可以通过丰富EC.element_to_be_clickable((By.XPATH,x))来检查元素是否真正可点击,并使用断言确保元素不被其他元素所支持。在我的项目中,我使用如下实现:

static bool IsElementClickable(this RemoteWebDriver driver, IWebElement element)
{
    return (bool)driver.ExecuteScript(@"
            (function(element){
                var rec = element.getBoundingClientRect();
                var elementAtPosition = document.elementFromPoint(rec.left+rec.width/2, rec.top+rec.height/2);
                return element == elementAtPosition || element.contains(elementAtPosition);
            })(arguments[0]);
    ", element);
}

此代码在C#中,但我确信您可以轻松地转换为您选择的编程语言。

更新: 我写了一篇关于点击selenium framework https://cezarypiatek.github.io/post/why-click-with-selenium-so-hard/

的问题的博客文章

答案 1 :(得分:0)

以下是Python Selenium文档的“等待”部分的链接:Click here

等等会:

element = WebDriverWait(driver, 10).until(
    EC.visibility_of((By.XPATH, "Your xpath"))
)
element.click();