即使元素在页面上不可见,Python Selenium element.is_display也返回true

时间:2017-09-12 16:24:52

标签: python selenium-webdriver

我正在测试汉堡包导航功能,点击后会显示菜单侧边栏。通过css将transform:TranslateX设置为-17rem,可隐藏菜单。在单击汉堡包图标之前,菜单侧栏的x属性为-272(不可见,不显示)。单击后,x属性为0(您可以在页面上看到菜单)。

当我在点击之前使用element.is_displayed()方法时,即使元素清晰,在页面上绝对不可见,该方法也会返回True。

我知道我可以通过检查x坐标来解决这个问题,但是,我是Python和Selenium的新手,想要了解有关is_displayed()方法的更多信息。难道这不会返回False吗?我错过了什么?

我唯一能想到的是,当添加x值加上宽度时,我可以看到元素的宽度从-272开始并在点击之前结束于0 px(元素的右边缘)。 is_displayed()是否返回True,因为以0px结尾的项目被视为视口的一部分?

https://github.com/SeleniumHQ/selenium/issues/4689

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument("--test-type")
options.binary_location = "/usr/bin/google-chrome"
driver = webdriver.Chrome(chrome_options=options)
driver.get("http://www.wesh.com")

#disable flex ad
driver.execute_script("""
        setInterval(function() {
            var $flex = document.querySelector("#ad-flex");
            //$flex.style.display = "none";
            $flex && $flex.parentNode && $flex.parentNode.removeChild($flex);
        }, 1);
        """)

#get menu sidebar, which is not visible initially unless you click the hamburger nav icon
sidebar = driver.find_element_by_css_selector("nav.sidepanel")
hamburger_nav = driver.find_element_by_css_selector("a.header-button.header-sidepanel-button")       

sidebar_visible_before = sidebar.is_displayed()
hamburger_nav.click()
time.sleep(.5)  
sidebar_visible_after = sidebar.is_displayed()

print("visible before click", sidebar_visible_before)
print("visible after click", sidebar_visible_after)
driver.quit()

0 个答案:

没有答案