Невозможно найти значение (элемент) в Xpath - PullRequest
1 голос
/ 18 марта 2019

Невозможно найти элемент в xpath, даже если этот элемент есть на веб-странице. Фактически код не генерирует исключение и не находит элемент.

for c in range(sheet.ncols):
    for r in range(sheet.nrows):
        st = (sheet.cell_value(r, c))
        print(str(st))
        xpath1 = "//input[@value='Analyze' and contains(@onclick,'" + str(st) + "')]"
        #xpath = "//input[@value='Analyze'][.='" + st + "']"
        print(driver.title)
        print(len(driver.find_elements_by_xpath(xpath1)))
        if driver.find_elements_by_xpath(xpath1):
            print("loop")
            driver.find_element_by_xpath(xpath1).click()  # Here new window will open
            time.sleep(2)
            #Main_Window = driver.current_window_handle
            driver.switch_to.window(driver.window_handles[-1])
            driver.find_element_by_xpath('/html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input').click()
            driver.close()
            driver.switch_to.window(driver.window_handles[-1])
            xpath2 = "//*[@id='create_button']"
            xpath3 = "//*[@id='update_button']"
            if check_exists_by_xpath(xpath2):
                driver.find_element_by_xpath(xpath2).click()
                driver.close()
                driver.switch_to.window(driver.window_handles[0])

            elif check_exists_by_xpath(xpath3):
                driver.close()
                driver.switch_to.window(driver.window_handles[0])
                continue

Ожидаемый результат должен быть:

23ST 1 петля 45 ST 1 6 ST 1 89 ST 1

Но при запуске приведенного выше кода получен следующий вывод: 23 ST 1 петля 4 ST 0 56 ST 0 7 ST 0

Что не такв коде?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Просто нужно переключиться на правое окно и рамку.

      if check_exists_by_xpath(xpath2):
            driver.find_element_by_xpath(xpath2).click()

      #else not required as you are not using the xpath3 to click

      driver.close()
      driver.switch_to.window(driver.window_handles[0])
      driver.switch_to.frame(base_frame_locator/index)
      driver.switch_to.frame(child_frame_locator/index)
      continue
0 голосов
/ 18 марта 2019

Я тоже хотел бы увидеть ваш HTML или получить ссылку на веб-страницу, чтобы проверить xpaths.Однако, основываясь на ваших результатах, я думаю, что вы, вероятно, не переключаетесь в окно [0] с неопределенным значением.Вы выполняете переключение окон внутри своих операторов if, поэтому, если ни одно из этих условий не будет выполнено, вы не переключите окна.Попробуйте отключить переключатель окна из вашего if, возможно, вот так:

for c in range(sheet.ncols):
    for r in range(sheet.nrows):
        st = (sheet.cell_value(r, c))
        print(str(st))
        xpath1 = "//input[@value='Analyze' and contains(@onclick,'" + str(st) + "')]"
        #xpath = "//input[@value='Analyze'][.='" + st + "']"
        print(driver.title)
        print(len(driver.find_elements_by_xpath(xpath1)))
        if driver.find_elements_by_xpath(xpath1):
            print("loop")
            driver.find_element_by_xpath(xpath1).click()  # Here new window will open
            time.sleep(2)
            #Main_Window = driver.current_window_handle
            driver.switch_to.window(driver.window_handles[-1])
            driver.find_element_by_xpath('/html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input').click()
            driver.close()
            driver.switch_to.window(driver.window_handles[-1])
            xpath2 = "//*[@id='create_button']"
            xpath3 = "//*[@id='update_button']"
            if check_exists_by_xpath(xpath2):
                driver.find_element_by_xpath(xpath2).click()
            driver.close()
            driver.switch_to.window(driver.window_handles[0])

Я не думаю, что вам даже нужен ваш второй оператор if, потому что он просто содержит

driver.close()
driver.switch_to.window(driver.window_handles[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...