欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入

程序员文章站 2022-07-03 10:14:52
Selenium一些特殊情况的处理失去焦点focus有时候click()或者send_keys(),没有反应。那是因为失去了焦点。使用driver. switch_to_active_element()或者driver.execute_script("arguments[0].focus();", element)解决。点击不生效的替代办法首先使用EC.element_to_be_clickable()确认元素是clickable的。然后可以尝试如下替代方法方法1:使用回车键代替。...

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就可以直接在文本框里输入日期。

本文地址:https://blog.csdn.net/jxzdsw/article/details/107366545

相关标签: selenium selenium