Is er een manier in Selenium 1.x of 2.x om door het browservenster te scrollen zodat een bepaald element dat wordt geïdentificeerd door een XPath in het zicht is van de browser? Er is een focusmethode in Selenium, maar het lijkt niet fysiek door de weergave in FireFox te scrollen. Heeft iemand suggesties om dit te doen?
De reden dat ik dit nodig heb, is dat ik de klik van een element op de pagina aan het testen ben. Helaas lijkt de gebeurtenis niet te werken tenzij het element zichtbaar is. Ik heb geen controle over de code die wordt geactiveerd wanneer op het element wordt geklikt, dus ik kan er geen fouten in opsporen of er wijzigingen in aanbrengen, dus de gemakkelijkste oplossing is om het item in beeld te schuiven.
Antwoord 1, autoriteit 100%
Heb veel dingen geprobeerd met betrekking tot scrollen, maar de onderstaande code heeft betere resultaten opgeleverd.
Dit zal scrollen totdat het element in beeld is:
WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500);
//do anything you want with the element
Antwoord 2, autoriteit 68%
Je kunt de klasse org.openqa.selenium.interactions.Actions
gebruiken om naar een element te gaan.
Java:
WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
Python:
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(driver.sl.find_element_by_id('my-id')).perform()
Antwoord 3, autoriteit 11%
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.scrollBy(250,350)");
Mogelijk wilt u dit proberen.
Antwoord 4, Autoriteit 6%
Als u op het Firefox-venster wilt bladeren met behulp van de Selenium WebDriver, is een van de manieren om JavaScript in de Java-code te gebruiken. De JavaScript-code om naar beneden te bladeren (naar de onderkant van de webpagina) is als volgt:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight));");
Antwoord 5, Autoriteit 6%
Targeting van elk element en verzendtoetsen verzenden (of omhoog / Links / rechts) lijkt ook te werken. Ik weet dat dit een beetje een hack is, maar ik ben niet echt in het idee om JavaScript te gebruiken om het scroll-probleem ook op te lossen.
Bijvoorbeeld:
WebElement.sendKeys(Keys.DOWN);
Antwoord 6, Autoriteit 4%
In Selenium moeten we de hulp nemen van een JavaScript-uitvoerder om naar een element te bladeren of door de pagina te bladeren:
je.executeScript("arguments[0].scrollIntoView(true);", element);
In de bovenstaande verklaring element
is het exacte element waar we moeten scrollen. Ik heb de bovenstaande code geprobeerd en het werkte voor mij.
Ik heb een complete post en video hierover:
http://learn-automation. com/how-to-scroll-into-view-in-selenium-webdriver/
Antwoord 7, autoriteit 4%
webElement = driver.findElement(By.xpath("bla-bla-bla"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", webElement);
Voor meer voorbeelden, ga hier. Allemaal in het Russisch, maar Java-code is intercultureel 🙂
Antwoord 8, autoriteit 2%
Je kunt dit codefragment gebruiken om te scrollen:
C#
var element = Driver.FindElement(By.Id("element-id"));
Actions actions = new Actions(Driver);
actions.MoveToElement(element).Perform();
Daar heb je het
Antwoord 9, autoriteit 2%
Gebruik het stuurprogramma om sleutels zoals de pagedownof downarrow-toets te verzenden om het element in beeld te brengen. Ik weet dat het een te simpele oplossing is en misschien niet in alle gevallen van toepassing is.
Antwoord 10, autoriteit 2%
Dit werkte voor mij:
IWebElement element = driver.FindElements(getApplicationObject(currentObjectName, currentObjectType, currentObjectUniqueId))[0];
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);
Antwoord 11, autoriteit 2%
Uit ervaring weet Selenium Webdriver niet automatisch naar een element te scrollen wanneer er meer dan één scrollbare sectie op de pagina is (wat vrij gebruikelijk is).
Ik gebruik Ruby en voor mijn AUT moest ik de klikmethode als volgt aanpassen;
class Element
#
# Alias the original click method to use later on
#
alias_method :base_click, :click
# Override the base click method to scroll into view if the element is not visible
# and then retry click
#
def click
begin
base_click
rescue Selenium::WebDriver::Error::ElementNotVisibleError
location_once_scrolled_into_view
base_click
end
end
De methode ‘location_once_scrolled_into_view’ is een bestaande methode in de WebElement-klasse.
Ik waardeer het dat je Ruby misschien niet gebruikt, maar het zou je wat ideeën moeten geven.
Antwoord 12
Selenium 2 probeert naar het element te scrollen en er vervolgens op te klikken. Dit komt omdat Selenium 2 geen interactie zal hebben met een element tenzij het denkt dat het zichtbaar is.
Scrollen naar het element gebeurt impliciet, dus u hoeft alleen maar het item te vinden en ermee te werken.
Antwoord 13
Het Ruby-script om een element in beeld te laten scrollen is als volgt.
$driver.execute_script("arguments[0].scrollIntoView(true);", element)
sleep(3)
element.click
Antwoord 14
Soms had ik ook te maken met het probleem van scrollen met Selenium. Dus gebruikte ik javaScriptExecuter om dit te bereiken.
Om naar beneden te scrollen:
WebDriver driver = new ChromeDriver();
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0, 250)", "");
Of ook
js.executeScript("scroll(0, 250);");
Om omhoog te scrollen:
js.executeScript("window.scrollBy(0,-250)", "");
Of,
js.executeScript("scroll(0, -250);");
Antwoord 15
Als u denkt dat andere antwoorden te hacky waren, is deze ook, maar er is geen javascript-injectie bij betrokken.
Wanneer de knop uit het scherm is, breekt en scrollt ernaar, dus probeer het opnieuw … Â \ _ (ツ) _ / ¯
try
{
element.Click();
}
catch {
element.Click();
}
Antwoord 16
Dit is een herhaalde oplossing met JavaScript, maar met een extra wachtend op element.
Anders ElementNotVisibleException
kan verschijnen als er enige actie op het element wordt uitgevoerd.
this.executeJavaScriptFunction("arguments[0].scrollIntoView(true);", elementToBeViewable);
WebDriverWait wait = new WebDriverWait(getDriver(), 5);
wait.until(ExpectedConditions.visibilityOf(elementToBeViewable));
Antwoord 17
Ik heb deze manier gebruikt voor het scrollen van het element en klik op:
List<WebElement> image = state.getDriver().findElements(By.xpath("//*[contains(@src,'image/plus_btn.jpg')]"));
for (WebElement clickimg : image)
{
((JavascriptExecutor) state.getDriver()).executeScript("arguments[0].scrollIntoView(false);", clickimg);
clickimg.click();
}
Antwoord 18
def scrollToElement(element: WebElement) = {
val location = element.getLocation
driver.asInstanceOf[JavascriptExecutor].executeScript(s"window.scrollTo(${location.getX},${location.getY});")
}
Antwoord 19
Mogelijk wilt u pagina scroll Web-elementen en webpagina-Selenium Webdriver met Javascript :
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FirefoxDriver ff = new FirefoxDriver();
ff.get("http://toolsqa.com");
Thread.sleep(5000);
ff.executeScript("document.getElementById('text-8').scrollIntoView(true);");
}
Antwoord 20
In de meeste van de situatie voor het scrollen van deze code werkt.
WebElement element = driver.findElement(By.xpath("xpath_Of_Element"));
js.executeScript("arguments[0].click();",element);
Antwoord 21
java
Probeer Scroll naar Element Gebruik x y
Positie en gebruik JavascriptExecutor
Hiermee is argument: "window.scrollBy(x, y)"
.
Volgend import:
import org.openqa.selenium.WebElement;
import org.openqa.selenium.JavascriptExecutor;
Eerst moet u ontvangen x y
locatie het element.
//initialize element
WebElement element = driver.findElement(By.id("..."));
//get position
int x = element.getLocation().getX();
int y = element.getLocation().getY();
//scroll to x y
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(" +x +", " +y +")");
Antwoord 22
Ik weet niet zeker of de vraag nog steeds relevant is, maar na het verwijzen naar ScrollIntoView-documentatie van https://developer.mozilla.org/en-us/docs/web/api/element/scrollIntoView .
De eenvoudigste oplossing zou
zijn
executor.executeScript("arguments[0].scrollIntoView({block: \"center\",inline: \"center\",behavior: \"smooth\"});",element);
Hiermee scrollt u het element in het midden van de pagina.
Antwoord 23
Het standaardgedrag van Selenium US om te bladeren, zodat het element nauwelijks in zicht is aan de bovenkant van de viewport. Ook hebben niet alle browsers precies hetzelfde gedrag. Dit is erg slecht. Als u video’s van uw browserproeven opneemt, zoals ik, is wat u wilt, is het voor het element om in beeld te bladeren en verticaal gecentreerd te zijn .
Hier is mijn oplossing voor Java:
public List<String> getBoundedRectangleOfElement(WebElement we)
{
JavascriptExecutor je = (JavascriptExecutor) driver;
List<String> bounds = (ArrayList<String>) je.executeScript(
"var rect = arguments[0].getBoundingClientRect();" +
"return [ '' + parseInt(rect.left), '' + parseInt(rect.top), '' + parseInt(rect.width), '' + parseInt(rect.height) ]", we);
System.out.println("top: " + bounds.get(1));
return bounds;
}
En vervolgens, om te scrollen, noemt u het als volgt:
public void scrollToElementAndCenterVertically(WebElement we)
{
List<String> bounds = getBoundedRectangleOfElement(we);
Long totalInnerPageHeight = getViewPortHeight(driver);
JavascriptExecutor je = (JavascriptExecutor) driver;
je.executeScript("window.scrollTo(0, " + (Integer.parseInt(bounds.get(1)) - (totalInnerPageHeight/2)) + ");");
je.executeScript("arguments[0].style.outline = \"thick solid #0000FF\";", we);
}
Antwoord 24
Iets dat voor mij werkte, was om de browser te gebruiken. Movemousetoelement-methode op een element onderaan het browservenster. Wonderbaarlijk werkte het in Internet & Nbsp; Explorer, Firefox en Chrome.
Ik koos dit over de JavaScript-injectietechniek, alleen maar omdat het minder hacky voelde.
Antwoord 25
Ik heb het testen met ADF-componenten en je moet een aparte opdracht hebben om te scrollen als Lazy Loading wordt gebruikt. Als het object niet is geladen en u probeert het te vinden met Selenium, gooit Selenium een element-niet-gevonden uitzondering.
Antwoord 26
Probeer dit als niets werkt voordat u op:
klikt
public void mouseHoverJScript(WebElement HoverElement) {
String mouseOverScript = "if(document.createEvent){var evObj = document.createEvent('MouseEvents');evObj.initEvent('mouseover', true, false); arguments[0].dispatchEvent(evObj);} else if(document.createEventObject) { arguments[0].fireEvent('onmouseover');}";
((JavascriptExecutor) driver).executeScript(mouseOverScript, HoverElement);
}
Antwoord 27
In Java kunnen we scrollen met JavaScript, zoals in de volgende code:
driver.getEval("var elm = window.document.getElementById('scrollDiv'); if (elm.scrollHeight > elm.clientHeight){elm.scrollTop = elm.scrollHeight;}");
U kunt een gewenste waarde toewijzen aan de variabele “ELM.SCROLLTOT”.
Antwoord 28
Een oplossing is:
public void javascriptclick(String element)
{
WebElement webElement = driver.findElement(By.xpath(element));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", webElement);
System.out.println("javascriptclick" + " " + element);
}
Antwoord 29
Deze code werkt voor mij:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.scrollBy(250, 350)");
ANTWOORD 30
Selenium kan automatisch naar een element in de schuifbalk scrollen voor een eenvoudige gebruikersinterface, maar voor een luie gebruikersinterface is scrollToElement nog steeds nodig.
Dit is mijn implementatie in Java met JavascriptExecutor.
U kunt meer details vinden in de Satix-broncode:
http://www.binpress.com/app/ satix-seleniumbased-automation-testing-in-xml/1958
public static void perform(WebDriver driver, String Element, String ElementBy, By by) throws Exception {
try {
//long start_time = System.currentTimeMillis();
StringBuilder js = new StringBuilder();
String browser = "firefox";
if (ElementBy.equals("id")) {
js.append("var b = document.getElementById(\"" +
Element + "\");");
} else if (ElementBy.equals("xpath")) {
if (!"IE".equals(browser)) {
js.append("var b = document.evaluate(\"" +
Element +
"\", document, null, XPathResult.ANY_TYPE, null).iterateNext();");
} else {
throw new Exception("Action error: xpath is not supported in scrollToElement Action in IE");
}
} else if (ElementBy.equals("cssSelector")) {
js.append("var b = document.querySelector(\"" +
Element + "\");");
} else {
throw new Exception("Scroll Action error");
}
String getScrollHeightScript = js.toString() + "var o = new Array(); o.push(b.scrollHeight); return o;";
js.append("b.scrollTop = b.scrollTop + b.clientHeight;");
js.append("var tmp = b.scrollTop + b.clientHeight;");
js.append("var o = new Array(); o.push(tmp); return o;");
int tries = 1;
String scrollTop = "0";
while (tries > 0) {
try {
String scrollHeight = ((JavascriptExecutor) driver).executeScript(getScrollHeightScript).toString();
if (scrollTop.equals(scrollHeight)) {
break;
} else if (driver.findElement(by).isDisplayed()) {
break;
}
Object o = ((JavascriptExecutor) driver).executeScript(js.toString());
scrollTop = o.toString();
Thread.sleep(interval);
tries++;
} catch (Exception e) {
throw new Exception("Action error:" +
" javascript execute error : " + e.getMessage() + ", javascript : " + js.toString());
}
}
} catch (Exception e) {
try {
ScreenshotCapturerUtil.saveScreenShot(driver, CLASSNAME);
} catch (IOException e1) {
throw new Exception("Save screenshot error!", e1);
}
throw e;
}
}