2017-09-18 21 views
1

J'ai une table Web séparée à 50 pages et plus, 20 enregistrements par page. Besoin de le vérifier par rapport à sql db.Comparer les tables Web et DB: le code saute les enregistrements DB

Les pages sont représentés sous forme de liens dans le fond du tableau comme celui-ci:

enter image description here

Maintenant, mon code clique page suivante (page en cours + 1) correctement et vérifie les pages 1 à 10 sans problème. Mais lorsqu'il clique sur le dernier lien (...) et passe à la page 11, il saute 20 enregistrements de la table DB et commence à vérifier l'enregistrement 201 à partir de la table Web avec l'enregistrement 221 de DB. Qu'est-ce qui va pas avec ça?

Voici le code que j'ai:

set PagesLink=description.Create 
PagesLink("micclass").Value = "Link" 
PagesLink("html tag").Value = "A" 

Do Until DBMaintenanceRS.EOF 
Set PagesCollection = .WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").ChildObjects(PagesLink) 'Get links to pages. 10 links to pages are showed in bottom of table. 

print PagesCollection.Count 

For pc = 0 To PagesCollection.Count-1 'start pages loop 

For rc = 2 to .WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").RowCount-1 'start table rows loop 
     For cc = 2 To .WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").ColumnCount(1) 'start table columns loop 
      wCell = .WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").GetCellData(rc, cc) 
      dbCell = DBMa 

intenanceRS.Fields(cc-2) 
        If trim(dbCell) = trim(wCell) Then 
         Print "Pass" 
        Else 
         print "FAIL::: ID="&.WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").GetCellData(rc, 2)&"-Column='"&.WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").GetCellData(1, cc)&"'-Value="&wCell&"-=-VS DB: "&dbCell 
        End If 

      Next 

      cc="" 
      wcell="" 
      dbcell="" 
      DBMaintenanceRS.MoveNext 
     Next 
    rc="" 
    print pc&"-=-"& PagesCollection(pc).GetROProperty("innertext") 

    If pc=0 Then 
     If NOT(PagesCollection(pc).GetROPRoperty("innertext")="...") Then 
      PagesCollection(pc).Click 
     End If 
Else 
    PagesCollection(pc).Click 
End If 
.Sync 
wait 1 

Set PagesCollection = .WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").ChildObjects(PagesLink) 
Next 
print "Next 10 pages" 
pc=0 
Set PagesCollection = .WbfGrid("html tag:=TABLE","html id:=cphBody_GridView1").ChildObjects(PagesLink) 
print DBMaintenanceRS.Fields(0) 
Loop 
+1

Vous avez 3 boucles 'For' imbriquées les unes dans les autres. Lorsque vous cliquez sur '...' votre code le traite comme une nouvelle page, mais sans rowcount d'objet, il n'y a rien à comparer avec les données DB, donc ces 10 enregistrements sont ignorés. – Dave

+0

une suggestion comment éviter cela? – Salek

+0

@Salek Lorsque vous cliquez sur le lien '...', que se passe-t-il? Le lien pour les pages 1 à 10 est-il encore visible? Ou nous seulement les liens de 10-20 suivis de '...' visible? – Gurman

Répondre

0

Votre variable de ligne de comptage (rc) est globalement compter les lignes, mais la page web contient uniquement la fenêtre actuelle de lignes (21..40 pour exemple) donc ce que vous pensez de la ligne 21 est en fait la première ligne du courant WbfGrid.

Vous devez disposer de compteurs distincts pour les lignes de base de données et WbfGrid lignes.

+0

une suggestion comment éviter cela? – Salek

+0

@Salek ont ​​deux variables séparées et zéro après avoir cliqué sur '...' – Motti