А Вас слово "not" не смущает? :)
[id*='day']:not([class='disabled']) = элемент, в айдишнике которого присутствует "day", и у которого НЕТ класса "disabled".
Соответственно, варианты, которые Вы пробовали:
css=#day:not([class*="disabled"]):not([class*="today"]) = элемент, айдишник которого = "day" (у Вас вроде бы не было таких элементов), и у которого НЕТ класса "disabled" и НЕТ класса "today".
css=[id*="day"]:not([class*="disabled"]):not([class*="today"]) = элемент, в айдишнике которого присутствует "day", и у которого НЕТ класса "disabled" и НЕТ класса "today".
#cal td.today = где-то ниже по DOM'у относительно элемента с id = "cal", найти элемент td, у которого ЕСТЬ класс "today".
Ничего удивительного, что с этими локаторами по-разному отрабатывает всё :).
Теоретически, [id*="day"]:not([class*="disabled"]):not([class*="today"]) должно было отработать и кликнуть по "вчера" (если по скрину с кодом смотреть). Возможно, пытается кликнуть до того, как календарь "откроется".
verify element present смотрит лишь на наличие элемента в DOM'e. Видно его или нет, можно ли по нему кликнуть и т.д. - не проверяется.
Попробуйте дожидаться не наличия элемента (verify element present), а его кликабельности (element clickable - не знаю, как оно в IDE пишется).
п.с.: [id*="day"].today:not([class*="disabled"]) = элемент, айдишник которого содержит "day", и у которого ЕСТЬ класс "today" и НЕТ класса "disabled".