Root причина в том, что в источнике нет элемента с cdk-overlay-pane btn btn-blue
. Вместо этого элемент с классом btn btn-blue
находится в div с классом cdk-overlay-pane
. Поэтому вы должны использовать By.css
в этом случае, поскольку вы указываете на элемент с помощью css
. используйте By.className
только тогда, когда вы находите элемент с class
элемента назначения.
Примечание: вы не должны явно заменить пробелы между классами в элементе class
с .
в качестве кода селена это позаботится об этом.
Пример:
findElement(By.className('btn.btn-blue'))
- правильно
findElement(By.className('btn btn-blue'))
- правильно
findElement(By.className('.btn.btn-blue'))
- Неправильно (поскольку селен будет предшествовать .
к имени класса, отправленному здесь)
Вот логика c, используемая селеном для справки.
static className(name) {
let names = name.split(/\s+/g)
.filter(s => s.length > 0)
.map(s => escapeCss(s));
return By.css('.' + names.join('.'));
}
Источник SeleniumHQ
Итак, вы можете попробуйте следующее:
(await driver).findElement(By.css(".cdk-overlay-pane .btn.btn-blue")).click();
Снимок экрана: