当前位置: 移动技术网 > IT编程>开发语言>Java > Selenium一些特殊情况的处理:失去焦点、点击不生效、长页面处理、先触发事件才能动态加载的元素、日期输入

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

2020年07月17日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网