2
votes

Comment cliquer sur un élément dans une table via Selenium Python

Je voudrais cliquer sur la cellule dans le tableau ID "ContractDesc", "EEE" content:

La page HTML:

driver.find_element_by_name("ContractDesc").click()

Mon code qui n'est pas fonctionnement:

driver.find_element_by_xpath('//*[@id="1"]/td[2]').click()

et

<table cellpadding="0" cellspacing="0" border="0" class="tablelist" id="table1" style="width: 80%; margin: 0px 0px 0px 0px;">
    <thead>
        <tr>
            <th style="width: 30%">
                AAA
            </th>
            <th>
                BBB
            </th>
            <th style="width: 40%">
                CCC
            </th>
        </tr>
    </thead><tbody>


    <tr id="1" onmouseout="fnMouseOut(1)" =="" ""="" onmouseover="fnMouseOver(1)" onclick="selectRow(this)" style="cursor: pointer; background-color: rgb(248, 248, 248);" projectid="111111">
        <td align="center" name="contno">
            DDD
        </td>
        <td name="ContractDesc">
            EEE
        </td>
        <td name="">
            FFF
        </td>
    </tr>

</tbody>
</table>

L'erreur est:

selenium.common.exceptions.NoSuchElementException: Message: aucun élément de ce type: impossible de localiser l'élément: {"method": "xpath", "selector": "// * [@ id =" 1 "] / td [ 2] "}


6 commentaires

La table est-elle dans un IFRAME ?


Oui, je pense que c'est sur le cadre, monsieur JeffC.


@ TZJ4, comment ça va? Avez-vous vérifié ma réponse? Merci.


@RatmirAsanov Personne ne peut utiliser, des réponses entières ont obtenu des erreurs comme "impossible de localiser l'élément". Je vous remercie


@ TZJ4, montrez-nous plus de HTML (iframe ou popup ou autre chose dans lequel votre élément Web nécessaire).


Merci beaucoup, passez à iframe maintenant cela a fonctionné.


3 Réponses :


1
votes

Essayez ce XPath:

driver.find_element_by_xpath("//td[@nom='ContractDesc' ").click()

Veuillez vérifier si l'élément est dans une iframe, si oui, vous devez basculer le pilote vers l'iframe en utilisant: WebElement iFrame = driver.findElement (By.tagName ("iframe")); puis driver.switchTo (). frame (iFrame); et ensuite vous devez cliquer sur l'élément par le xpath donné et si vous voulez basculer vers le contexte par défaut, vous pouvez utiliser driver.switchTo (). defaultContent ();


2 commentaires

Merci monsieur, mais l'erreur "Impossible de localiser l'élément:"


Veuillez vérifier si c'est dans une iframe et si oui, vous devez basculer le pilote vers l'iframe en utilisant: WebElement iFrame = driver.findElement (By.tagName ("iframe")); puis < code> driver.switchTo (). frame (iFrame); puis vous devez cliquer sur l'élément par driver.find_element_by_xpath ("// td [@ name = 'ContractDesc']"). c‌ lick () et si vous voulez changer dans le contexte par défaut, vous pouvez utiliser driver.switchTo (). defaultContent (); Veuillez essayer ceci et me faire savoir si cela fonctionne. Je modifie également ma réponse.



1
votes

Vous pouvez utiliser xpath ci-dessous pour sélectionner par nom et texte, normalize-space supprimer tous les espaces:

//td[@name='ContractDesc' and normalize-space(.)='EEE']


0 commentaires

0
votes

Pour cliquer () sur l'élément avec le texte comme EEE , vous pouvez utiliser l'une des solutions suivantes:

  • Utilisation de CSS_SELECTOR :

    driver.find_element_by_xpath("//table[@class='tablelist' and @id='table1']//tr[@id='1']//td[@name='ContractDesc' and normalize-space()='EEE']").click()
    
  • Utilisation de XPATH :

    driver.find_element_by_css_selector("table.tablelist#table1 tr#1 td[name='ContractDesc']").click()
    


1 commentaires

Merci beaucoup, mais les deux ne fonctionnent pas. Erreur de retour CSS "A18-0110" et XPATH renvoie "Impossible de localiser l'élément:"