2017-02-20 3 views
0

Ich habe vorherige Beiträge zu diesem Thema und habe immer noch Probleme, dies zu arbeiten.Probleme Scrollen horizontal in Java/Selen

Ich habe eine kleine Bildlaufleiste Ich muss nach rechts bewegen, damit ich auf Elemente zugreifen kann, die ich testen muss. Der Code für die Bildlaufleiste ist wie folgt:

<div class="ngscroll-scrollbar" ng-style="styles.scrollbar" style="height: 
6px; bottom: 3px; left: 3px; opacity: 0; width: 126.05px; transition: 
opacity 0.3s ease-in-out 0s, border-radius 0.1s linear 0s, height 0.1s 
linear 0s, bottom 0.1s linear 0s; position: absolute; cursor: default; 
background: rgba(0, 0, 0, 0.6) none repeat scroll 0% 0%; border-radius: 3px;"></div> 

Die Bildlaufleiste in einem Container ist, weiß ich nicht, ob das ein Problem ist.

<div class="ngscroll-scrollbar-container" ng-show="!isTouch" ng- 
style="styles.scrollbarContainer" style="bottom: 0px; left: 0px; width: 
100%; height: 12px; margin-left: 0px; position: absolute; transition: 
background 0.3s ease-in-out 0s; border-radius: 6px; background: transparent 
none repeat scroll 0% 0%;"> 

Hier ist mein Code:

WebElement scroll = driver.findElement(By.xpath("//html/body/div[2]/main/div/ui-view/ui-view/div[2]/div/div[1]/su-flight-filters/div/aside/div/section/div/div/div[2]/div/div[2]/div")); 
JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript("document.getElementsByClassName('ngscroll-scrollbar').scrollRight += 50", ""); 

Ich bekomme keine Fehler, aber die Bildlaufleiste bewegt sich nicht. Ich habe Werte von 50, 250 und 400 probiert.

Wer hat irgendwelche Ideen?

Antwort

0

.getElementsByClassName() gibt eine Sammlung zurück. Versuchen Sie

js.executeScript("document.getElementsByClassName('ngscroll-scrollbar')[0].scrollRight += 50", ""); 

, um das erste übereinstimmende Element zu scrollen. Sie müssen überprüfen und sicherstellen, dass die erste Übereinstimmung die gewünschte ist.

+0

Das scheint auch nicht zu funktionieren. Ich bin mir nicht sicher, wie ich mit dieser Sammlung umgehen soll. Gibt es eine Möglichkeit, den Inhalt auf die Konsole zu drucken, um zu sehen, was er enthält? – Sulteric

+0

Sie können 'document.getElementsByClassName ('ngscroll-scrollbar'). Length 'in der Konsole ausführen und sehen, wie viele Übereinstimmungen mit diesem Locator vorhanden sind. Sie sollten in der Lage sein, irgendeinen dieser JS in der Konsole auszuführen und zu sehen, dass es funktioniert. – JeffC

0

Verwenden Action-Klasse der Regler zu bewegen, finde ich dies als convnent Weg wähle Wert von X für jede seiner Breite ist abhängig von Ihrem Schieber ist, und wenn Sie für Schleife verwenden Zeiger auf mehrere Position ziehen

WebElement slider = driver.findElement(By.id("slider")); 
    int width=slider.getSize().getWidth(); 
    Actions move = new Actions(driver); 
    Action action = (Action) move.dragAndDropBy(slider, 30, 0).build(); 
    action.perform(); 
+0

Ich denke, das Problem ist, dass diese Bildlaufleiste angeklickt und dann übergezogen werden muss. Wird das oben tun? Ich habe es versucht und ich sehe es scheint aktiviert zu werden, aber es rutscht nicht. Die Bar ist 205 breit und 6 hoch. – Sulteric

+0

oder verwenden Sie diesen Code, indem Sie den Bereich in for for loop angeben move.moveToElement (Schieberegler) .click (Schieberegler) .sendKeys (Keys.ARROW_RIGHT) .perform(); – Dharam

+0

oder verwenden Sie diese unten im Aktionsobjekt, geben Sie die Anzahl der zu ziehenden Pixel an move.moveToElement (draggablePartOfScrollbar) .clickAndHold(). MoveByOffset (0, numberOfPixelsToDragTheScrollbarDown) .release(). Perform(); – Dharam