SeleniumBase – невозможно выбрать значение из раскрывающегося списка, используя значение, текст, индекс

Я работаю над автоматизацией своих рабочих процессов в SeleniumBase + Python. У меня возникли проблемы с этой конкретной веб-страницей, где я хочу щелкнуть раскрывающийся список и выбрать значение из списка представленных нам вариантов.

Я пробовал использовать методы:

self.click('//*[@id = "-1_PersonProfileFields.AddressCountry"]')
self.send_keys("India")
self.select_option_by_index("//*[@id='-1_PersonProfileFields.AddressCountry']",45)
self.click('select#-1_PersonProfileFields.AddressCountry')
self.send_keys("India")

Однако я сталкиваюсь с ошибками NoSuchElementException при каждом методе.

Весь код указан ниже:

from seleniumbase import BaseCase,Driver
import time
BaseCase.main(__name__, __file__)

class MyTestClass(BaseCase):
    def test_demo_site(self):
      self.get("https://careers-se.icims.com/jobs/67282/area-sales-manager---distributor/candidate?from=login&eem=VALI7WbuYjsYNVeTcJFe1Lp4NyzhJKL%252BgGk896dMArDy6SnRigcgxLtwQv3zbEEv&code=d4da33efe18fb5649da3012875a78ef45945b558aebf7cc0ab3716dce83614e7&ga=c2c2d57aa55f3a4b29a0cfc15e12e9e57cc3deaa024a3a5bc8be5724f93cc0b2&accept_gdpr=1&gdpr_consent_type=37002057002")
      time.sleep(5)
      self.switch_to_frame_of_element("//*[@id='PersonProfileFields.FirstName']")
      self.type("//*[@id='PersonProfileFields.FirstName']","Saul")
      time.sleep(10)
      self.select_option_by_index("//[@id='-1_PersonProfileFields.AddressCountry']",45)
      input("Continue")

Подскажите, пожалуйста, где я допустил ошибку и как ее исправить.

Спасибо !


191
2

Ответы:

Согласно документации, вы должны использовать

self.switch_to_frame("iframe")

чтобы переключиться на IFRAME.

Итак, ваш код должен выглядеть так

class MyTestClass(BaseCase):
    def test_demo_site(self):
      self.get(...)
      self.switch_to_frame("#icims_content_iframe") # this line was updated
      self.type("//*[@id='PersonProfileFields.FirstName']", "Saul")
      self.click("//a[@id='-1_PersonProfileFields.AddressCountry_icimsDropdown']")
      self.type("[aria-controls='-1_PersonProfileFields.AddressCountry_dropdown-results']", "India")
      self.click("li[title='India']")
      ...

Когда вы закончите работу в этом IFRAME, обязательно позвоните self.switch_to_default_content(), чтобы выйти из контекста IFRAME.


Решено

Вот скрипт https://github.com/seleniumbase/SeleniumBase для этого:

from seleniumbase import BaseCase
BaseCase.main(__name__, __file__)

class MyTestClass(BaseCase):
    def test_career_page(self):
      self.get("https://careers-se.icims.com/jobs/67282/area-sales-manager---distributor/candidate?from=login&eem=VALI7WbuYjsYNVeTcJFe1Lp4NyzhJKL%252BgGk896dMArDy6SnRigcgxLtwQv3zbEEv&code=d4da33efe18fb5649da3012875a78ef45945b558aebf7cc0ab3716dce83614e7&ga=c2c2d57aa55f3a4b29a0cfc15e12e9e57cc3deaa024a3a5bc8be5724f93cc0b2&accept_gdpr=1&gdpr_consent_type=37002057002")
      self.switch_to_frame("#icims_content_iframe")
      self.type("//*[@id='PersonProfileFields.FirstName']", "Saul")
      self.click('a span[id* = "Fields.AddressCountry"] span')
      self.type('[id* = "Fields.AddressCountry"] input', "India")
      self.click('[id* = "Fields.AddressCountry"] li[title = "India"]')

      breakpoint()

Я тоже провел некоторую оптимизацию. Я сопровождаю SeleniumBase, поэтому кое-что знаю. :)