2017-09-27 8 views
1

J'essaie d'utiliser le code suivant pour déplacer un curseur avec Selenium Webdriver, mais rien ne se passe. J'ai essayé le même code pour un curseur différent et cela fonctionne. Slider est ici ("Range"): https://refreshless.com/nouislider/slider-values/Est-ce que quelqu'un a une idée de comment DragAndDrop ce specifig (noUiSlider) avec du sélénium?

J'utilise le navigateur Chrome, Sélénium v3.6.0

Comment puis-je déplacer un curseur?

 IWebElement knob = driver.FindElement(By.XPath("/html/body/div[2]/section[3]/div[1]/div/div/div/div/div")); 

     //try1 
     Actions a1 = new Actions(driver); 
     a1.DragAndDropToOffset(knob, 30, 0).Build().Perform(); 
     //try2 
     Actions a2 = new Actions(driver); 
     a2.ClickAndHold(knob).MoveByOffset(30, 0).Release().Build().Perform(); 
+0

Tu ne peux pas changer simplement les valeurs des attributs? vérifier cette image qui met en évidence les valeurs qui ont changé tout en faisant glisser https://ibb.co/dSJYdk aria-valuenow est finalement ce que vous voulez – user1845593

+0

Quelle version de sélénium utilisez-vous? Semblez que les dernières versions de pilotes ne prennent pas entièrement en charge l'API d'actions. – smit9234

Répondre

1

Une méthode que vous pouvez utiliser consiste simplement à cliquer sur le curseur à l'emplacement souhaité.

Puisque vous êtes susceptible de réutiliser ce code, je le mettrais dans une fonction. Cette fonction prendrait dans l'élément à cliquer (le curseur) et la position relative avec laquelle cliquer. Pensez à la position relative comme un% ... 0,5 est à mi-chemin, 0,1 est 1/10e et ainsi de suite. La fonction obtient juste la largeur de l'élément, puis applique le% à la largeur pour obtenir la position de cliquer horizontalement. La position verticale est juste la moitié de la hauteur de l'élément (donc vous cliquez au milieu verticalement).

static void SetRange(IWebElement e, double range) 
{ 
    int point = (int)(e.Size.Width * range); 
    new Actions(Driver).MoveToElement(e, point, e.Size.Height/2).Click().Build().Perform(); 
} 

Pour appeler, il suffit d'utiliser

SetRange(Driver.FindElement(By.Id("slider-range")), 0.1); // 0.1 is 10% 
SetRange(Driver.FindElement(By.Id("slider-range")), 0.5); // 0.5 is 50% or halfway