selenium 解决出现Message: element not interactable元素不可交互的问题

最近在使用 selenium 的时候,遇到了 element not interactable 的错误。引发错误的代码如下:

By orgOpt = By.xpath("//span[contains(text(),'XXX')]");
var p3 = driver.wait(until.elementLocated(orgOpt));
p3.then(function() {
    driver.findElement(orgOpt).click();
});

错误信息如下:

Uncaught (in promise) ElementNotInteractableError: element not interactable
  (Session info: chrome=78.0.3904.87)
    at Object.throwDecodedError (second-app\node_modules\selenium-webdriver\lib\error.js:550:15)
    at parseHttpResponse (second-app\node_modules\selenium-webdriver\lib\http.js:563:13)
    at Executor.execute (second-app\node_modules\selenium-webdriver\lib\http.js:489:26)
    at processTicksAndRejections (internal/process/task_queues.js:89:5)
    at async thenableWebDriverProxy.execute (second-app\node_modules\selenium-webdriver\lib\webdriver.js:699:17)

后来发现,应该是尝试点击的时候元素还未可见。

解决办法就是在 until.elementLocated 之后再添加一个 until.elementIsVisible 的判断。

By orgOpt = By.xpath("//span[contains(text(),'XXX')]");
var p3 = driver.wait(until.elementLocated(orgOpt));
p3.then(function() {
    var p4 = driver.wait(until.elementIsVisible(driver.findElement(orgOpt))); // 添加一个判断
    p4.then(function() {
        driver.findElement(orgOpt).click(); // 点击下拉选项选中机构
    });                    
});        

这样处理之后,就没有遇到 element not interactable 的错误了。


版权声明:本文为xxc1605629895原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。