Как мне щелкнуть элемент ng show с динамическим идентификатором с использованием селена, элемент выглядит так, как показано ниже:
<i ng-show = "courseDetails.lmstype !='3rdParty' && courseContentLevel.levelName != 'Pre-Requisite' && courseContentLevel.levelName != 'End of Course'" class = "fa fa-plus-circle font-20 pointer-cursor margin-right-25" data-toggle = "dropdown" id = "dropdownMenu40282cf567bbb4d00167c117ccbb016b" ng-class = "{'margin-right-25' : courseContentLevel.levelName == 'Course Outcome'}"></i>
::before == $0
</i>
Здесь идентификатор постоянно меняется, поэтому я не могу полагаться на By.id, чтобы щелкнуть по нему. Если я планирую пойти после xpath, это тоже будет выглядеть так:
//*[@id = "dropdownMenu40282cf567bbb4d00167c117ccbb016b"]
это тоже основано на идентификаторе, который, я надеюсь, тоже бесполезен.
Пожалуйста, дайте здесь другой обходной путь ...
Заранее спасибо.
Если кто-то столкнется с таким же сценарием, ответ в моем случае: driver.findElement (By.cssSelector ("div.cb-sideBar: nth -child (1)> div: nth-child (1)> ul: nth-child (2)> li: nth-child (1)> div: nth-child (1)> span: nth-child (3)> я: nth-child (1) ")). click ();
Имейте в виду, что это может перестать работать, если структура HTML изменится. На мой взгляд, более точный способ найти этот веб-элемент будет примерно таким: driver.findElement (By.XPath ("// * [contains (local-name (), 'i') and contains (@ ng- show, 'courseDetails')] "))
By.cssSelector () помог мне! Другие варианты игры с xpath, такие как «начинается с», «содержит» и т. д., У меня не работали.