2017-09-20 1 views
0

Pour le lien suivant,Localisation à l'aide id échoue, mais en utilisant le lien, il réussit à cliquer sur

<td style="padding-top:3px" align="center"> 
GNWL200/WL102 
<br/> 
<a id="17235-SL-GN-0" href="javascript:jpBook($('#17235-SL-GN-0'),'17235','HSRA','SRT','22-9-2017','SL','GN',3,false,0,0,'S');" tabindex="1">Book Now</a> 
</td> 

Si j'utilise le lien comme indiqué ci-dessous, il réussit à cliquer

browser.element(link: "Book Now").click 

Mais si je utilisations l'identifiant indiqué ci-dessous indique que l'élément n'est pas visible (pas présent). Puis-je savoir pourquoi?

browser.link(:id, "17235-SL-GN-0").click 

Erreur

Uncaught exception: element located, but timed out after 30 seconds, waiting for #<Watir::Anchor: located: true; {:id=>"17235-SL-GN-0", :tag_name=>"a"}> to be present 
    C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-6.8.4/lib/watir/elements/element.rb:633:in `raise_present' 
    C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-6.8.4/lib/watir/elements/element.rb:672:in `rescue in element_call' 
    C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-6.8.4/lib/watir/elements/element.rb:684:in `element_call' 
    C:/Ruby23/lib/ruby/gems/2.3.0/gems/watir-6.8.4/lib/watir/elements/element.rb:136:in `click' 
    C:/Users/rajagopalan.m/RubymineProjects/SeleniumLearning/Rest/TrainTicketBooking.rb:18:in `<top (required)>' 
+0

Le lien est visible sur la page, ou at-il 'style = "display: none;"'? Vous devrez peut-être passer 'visible: false' en tant que paramètre. –

+0

@TomLord Link est visible. Non, cette balise de style n'est pas capable d'afficher 'style =": none; "', j'ai joint le code correspondant au début. C'est en cliquant pendant que j'utilise le lien, mais il ne clique pas pendant que j'utilise l'identifiant. Voilà pourquoi la question est! – RAJ

+0

Avez-vous confirmé qu'il n'y a qu'un seul élément trouvé par: browser.link (: id, "17235-SL-GN-0") sur la page? – yong

Répondre

0

Et la solution à ma question du commentaire @yong

En fait il y a deux éléments présents dans la page avec le même id et le premier est invisible et le second est l'élément réel que je voulais cliquer, c'est ce qu'il lance Erreur.

Voici le fichier html

<td style="padding-top:3px" align="center"> 
GNWL203/WL105 
<br/> 
**<a id="17235-SL-GN-0" href="javascript:jpBook($('#17235-SL-GN-0'),'17235','HSRA','SRT','22-9-2017','SL','GN',3,false,0,0,'S');" tabindex="1">Book Now</a>** 
</td> 
<td style="padding-top:3px" align="center"> 
<td style="padding-top:3px" align="center"> 
<td style="padding-top:3px" align="center"> 
<td style="padding-top:3px" align="center"> 
<td style="padding-top:3px" align="center"> 
</tr> 
</tbody> 
</table> 
<span style="font:11px arial;color:red;float:right">* CURR_AVBL : Current Booking Available | RAC : Reservation Against Cancellation | WL # : Wait List | REGRET/WL : No more booking allowed | AVAILABLE : Available | NOT AVAILABLE : Not Available</span> 
<br/> 
</div> 
</div> 
<div id="j_idt413" class="rf-p "> 
<div id="enqpanelid1" class="rf-p "> 
</div> 
</span> 
<form id="avlAndFareForm" name="avlAndFareForm" method="post" action="/eticketing/trainbetweenstns.jsf" enctype="application/x-www-form-urlencoded"> 
<input name="avlAndFareForm" value="avlAndFareForm" type="hidden"/> 
<div id="avlAndFareForm:trainSchedPanel" style="visibility: hidden;"> 
<div id="avlAndFareForm:j_idt480" class="rf-p " style="min-height:383px;width:99%;"> 
<div id="avlAndFareForm:j_idt480_body" class="rf-p-b "> 
<ul id="tabul"> 
<div id="tabcontent"> 
<div id="c1" class="container-div"> 
<div id="j_idt382" class="rf-p "> 
<div id="j_idt382_header" class="rf-p-hdr "> 
<div id="j_idt382_body" class="rf-p-b "> 
<table class="t1" cellspacing="0" cellpadding="4px"> 
<tbody> 
<tr> 
<tr> 
<td style="text-align: left;padding-left: 1em;"> 
<td style="padding-top:3px" align="center"> 
GNWL203/WL105 
<br/> 
**<a id="17235-SL-GN-0" href="javascript:jpBook($('#17235-SL-GN-0'),'17235','HSRA','SRT','22-9-2017','SL','GN',3,false,0,0,'S');" tabindex="1">Book Now</a>** 
</td> 
+1

Nous avons ajouté le paramètre visible pour les cas tels que: 'browser.link (id: '17235-SL-GN-0', visible: true) .click' – titusfortner

+0

Aussi, quelqu'un a mentionné récemment qu'il avait des difficultés à localiser des éléments par ids qui ont commencé avec un nombre (qui n'a pas l'habitude d'être autorisé). J'ai eu l'intention d'écrire une spécification pour le vérifier, mais je n'ai pas eu le temps. Cela pourrait aussi causer un problème (si vous avez utilisé 'element' au lieu de' link') – titusfortner

+0

@titusfortner Pour votre premier commentaire, d'accord. En fait, j'ai oublié d'utiliser un localisateur visible.Et à votre deuxième commentaire, Pourquoi utiliser l'élément est problématique alors que le lien n'est pas un problème quand j'utilise l'identifiant? – RAJ

0

Si le lien est pas visible Cliquez régulière() utiliser jsClick:

"arguments[0].click();" 

Je ne sais pas à quoi ça ressemble à Ruby, mais C#, Java ressemble simillar à:

JavascriptExecutor executor = (JavaScriptExecutor) driver; 
executor.executeScript("arguments[0].click();", element); 
+0

Je sais que je peux cliquer sur Javascript, Javascript ne vérifie pas la condition de visibilité mais la question est pourquoi le sélénium ne peut pas être cliqué sur l'élément en utilisant le localisateur Id alors qu'il peut cliquer sur le localisateur 'link'. – RAJ