selenium:解决页面元素display:none !important的方法
在UI自动化测试中,有时候会遇到页面元素无法定位的问题,包括xpath等方法都无法定位,是因为前端元素被设置为不可见导致。
通过JavaScript修改页面元素属性来定位的方法
1.具体问题:
更改登录模式,测试环境登录界面被屏蔽,导致无法进行UI自动化测试
查看元素属性display:none !important ,这里的 !important 表示高优先级
页面调试:
2.问题解决:
通过查看相关文档,可以看出display:none方法是设置元素不可见,这就是导致为什么通过定位页面元素无法定位的原因。
关于display更多的信息,可以看这里:HTML DOM display用法
放上我的代码
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://...')
方式一:
设置style的属性
js = "document.getElementById('loginFormID').setAttribute('style','display:block !important')"
方式二:
使用setProperty 如果要设置!important,推荐用这种方法设置第三个参数
js = "document.getElementById('loginFormID').style.setProperty('display','block','important')"
# 调用js脚本
driver.execute_script(js)
sleep(5)
driver.find_element_by_id("accountID").send_keys("123456")
driver.quit()
代码解析:
document提供以下方法来定位display元素:
getElementById():返回对指定ID第一个对象的引用
getElementsByName() :返回带有指定名称的对象集合
getElementsByTagName():返回带有指定标签名的对象集合
此篇博客记录工作问题,如果有相同问题的友友们,希望能带给你们便利。