一 定位元素找不到的问题
(1)页面加载慢,去进行相关操作时,元素还没有加载出来
a. 可以加如下关键字
Wait Until Element Is Visible elementlocator timeout errormessage
ex:
Wait Until Element Is Visible //input[text()="role"] 30 this element can't be found
b. 可以用sleep 增加延时
sleep 3
(2) 提示元素ElementClickInterceptedException:click intercepted
a. 定位元素,页面有多个相同的元素, 我们可以先把所有的元素都找到,然后取自己需要的那个元素去操作
@{ele_list} Get WebElements ${ele_locator}
log many @{ele_list}
click element @{ele_list}[0]
b. 定位元素,元素被隐藏,比如一些元素是需要其他操作触发才能出现,这时我们可以先触发,使其在页面显示,并用鼠标操作
click element {locator} # 触发使其显示 mouse over {ele_locator} # 鼠标悬停其上 click element ${ele_locator} # 进行点击
c. 定位元素,点击被另外一个元素接收了,这时有可能是因为,这个元素是一个蒙层动画中的元素,过几秒后消失。等消失后,就可以点击想要的元素了,可以在点击之间添加延时,或是执行js
${status} ${return_value} Run Keyword And Ignore Error click element ${input_checkbox_locator}
log ${status}+${return_value}
run keyword if "${status}" != "PASS" ExectureJSClick ${input_checkbox_locator}
# 自定义关键字
ExectureJSClick
[Arguments] ${locator}
execute javascript document.evaluate('${locator}', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).click()
(3) StaleElementReferenceException
1)重新刷新页面:driver.refresh(),此方法对此问题解决非常有效,但是我的测试场景中不允许刷新,否则,查询结果就变化了,所以此方法不能使用,尝试使用接下来的方法:设置等待时间。
2)设置等待时间:time.sleep(n),对脚本使用此方法,但是仍然报错,并没有解决我的问题。PS某些情况下此等待是可以解决此问题的,但是并不是时常奏效
3)捕捉异常StaleElementReferenceException,然后重新获取元素,此方法比较靠谱,并且我的脚本使用此方法后,执行通过。