Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入 |
您所在的位置:网站首页 › python切换窗口无法获取元素怎么办 › Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入 |
Selenium一些特殊情况的处理
失去焦点focus
有时候click()或者send_keys(),没有反应。那是因为失去了焦点。使用driver. switch_to_active_element()或者driver.execute_script("arguments[0].focus();", element)解决。 点击不生效的替代办法首先使用EC.element_to_be_clickable()确认元素是clickable的。 然后可以尝试如下替代方法 方法1:使用回车键代替。 例如: driver.find_element_by_xpath("//*[@id='student']/a[1]").send_keys(Keys.ENTER) 方法2:使用javascript代替。 例如: button=driver.find_element_by_xpath("//*[@id='loginButton']") driver.execute_script("arguments[0].click()",button) # 执行js语句 再例如: js ='document.getElementById("password").click()' #使用 js查找然后点击元素 driver.execute_scrtip(js) 长页面有些页面很长,为了减少流量使用,提高加载速度,这些页面常常使用AJAX实现懒加载。只有即将进入屏幕范围时才进行加载。没有加载的元素也就无法定位。 对于长页面,可以先拖动页面到底部,触发页面完成加载。 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
如果元素处于不可见区域,那么虽然可以定位到,但是不能操作。可以利用js使得元素处于可见区域。例如: element = driver.find_element_by_name("Tom") driver.execute_script("arguments[0].scrollIntoView();", element) 先触发事件才能动态加载的元素对于要先触发事件才能动态加载的元素。要先触发事件,然后find_element。 如果是动态菜单,需要一级一级点击展开进入。 隐藏菜单,需先鼠标悬停在按钮上,出现子菜单,然后才可以点击子菜单。 示意举例: ActionChains(driver).move_to_element("父菜单按钮").perform() driver.find_element_by_link_text("子菜单项").click() 日期输入很多时候,对于日期输入框,不允许直接输入,而是必须使用日期控件选择,selenium定位时不方便。可以使用js将readonly属性去掉。例如:driver.execute_script("document.getElementById('date').removeAttribute('readonly')")。这样selenium就可以直接在文本框里输入日期。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |