Impossible de trouver l'élément dans xpath même s'il est présent dans la page Web. En fait, le code ne lance ni Exception ni find element.

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

La sortie attendue devrait être:

23 Boucle ST 1 45 ST 1 6 ST 1 89 ST 1

Mais a obtenu la sortie ci-dessous lors de l'exécution du code ci-dessus: 23 ST 1 boucle 4 ST 0 56 ST 0 7 ST 0

Quel est le problème dans le code?

Merci d'avance.

1
Mounika Krishna 18 mars 2019 à 05:07

2 réponses

Meilleure réponse

Il suffit de passer à la bonne fenêtre et au bon cadre.

      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
1
supputuri 18 mars 2019 à 07:21

Moi aussi, je voudrais voir votre code HTML ou obtenir un lien vers la page Web pour vérifier les xpaths. Cependant, sur la base de votre sortie, je pense qu'il est probable que vous ne basculiez pas vers la fenêtre indéfinie [0]. Vous exécutez le changement de fenêtre dans vos instructions if, donc si aucune de ces conditions n'est remplie, vous ne changerez pas de fenêtre. Essayez de retirer le commutateur de fenêtre de votre si, peut-être comme ceci:

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])

Je ne pense pas que vous ayez même besoin de votre deuxième déclaration if, car elle contient simplement

driver.close()
driver.switch_to.window(driver.window_handles[0])
0
C. Peck 18 mars 2019 à 06:11