1
votes

Cliquer sur l'onglet Javascript en utilisant Selenium et Python sans identifiant de classe ou nom d'élément unique

J'ai ce code d'élément HTML que j'ai actuellement du mal à comprendre pour l'utiliser pour cliquer sur l'onglet qui dit Problème. Comme le "problème" n'a pas de nom de classe ou d'ID d'élément unique, je suis incapable de comprendre comment envoyer un clic ().

J'ai essayé de vérifier si le z-index peut être utilisé comme index (supposé) et utilisé ci-dessous ligne de code

<div class="TabsViewPort" style="position: relative; overflow: hidden; width: 896px; height: 22px; float: left;">
<div style="overflow: visible; float: left; width: 897px; top: 0px; left: 0px;">
<dl class="OuterOuterTab">
<dd class="OuterTab" artabid="955000038" arwindowid="0" style="top: 1px; z-index: 1; left: 0px; visibility: inherit; display: block;"><span class="TabLeftRounded">&nbsp;</span>
<span class="Tab"><a href="javascript:" class="btn f1" style="color:#000000;">My&nbsp;Profile</a>
</span>
<span class="TabRight">&nbsp;</span>
</dd>
<dd class="OuterTabSelected" artabid="600000203" arwindowid="0" style="top: 1px; z-index: 3; left: 63px; visibility: inherit; display: block;"><span class="TabLeft">&nbsp;</span>
<span class="Tab"><a href="javascript:" class="btn f1">Approval</a>
</span>
<span class="TabRight">&nbsp;</span>
</dd>
<dd class="OuterTab" artabid="536870915" arwindowid="0" style="top: 1px; z-index: 1; left: 409px; visibility: inherit; display: block;"><span class="TabLeft">&nbsp;</span>
<span class="Tab"><a href="javascript:" class="btn f1">Problem</a>
</span>
<span class="TabRight">&nbsp;</span>
</dd>
</dl>
</div>
</div>

mais il semble que je me trompe.

Code HTML comme ci-dessous

browser.switch_to_frame(a[3])

p>


0 commentaires

3 Réponses :


0
votes

veuillez trouver ci-dessous xpath pour cliquer sur le troisième onglet

(//span[@class="Tab"])[3]/a


0 commentaires

1
votes

Si l'élément est présent dans une iframe, vous devez d'abord passer à iframe pour accéder à l'élément. Vous pouvez utiliser la méthode suivante pour frame_to_be_available_and_switch_to_it()

Par ID de localisateur

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

OU

Par localisateur NAME
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[@class='Tab']//a[text()='Problem']"))).click()

Une fois que vous êtes passé à iframe, vous pouvez accéder à l'élément en utilisant xpath p>

Cliquer sur l'élément Induce WebDriverWait et element_to_be_clickable()

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name of the iframe")))

Vous devez importer la suite pour exécuter le code ci-dessus.

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"id of the iframe")))

J'espère que cela vous aidera.


0 commentaires

1
votes

L'élément avec le texte comme Problème est un élément JavaScript activé afin de click () sur l'élément que vous devez induire WebDriverWait pour que l'élément soit cliquable et vous pouvez utiliser l'une des solutions suivantes:

  • Utilisation de XPATH A:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Utilisation de XPATH B (raccourci):

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn f1' and text()='Problem']"))).click()
    
  • Remarque : vous devez ajouter les importations suivantes:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='TabsViewPort']//dl[@class='OuterOuterTab']//dd[@class='OuterTab']//a[@class='btn f1' and text()='Problem']"))).click()
    


1 commentaires

Je suis un noob qui n'a jamais essayé XPath mais cela m'a donné un début. Merci!