web-dev-qa-db-fra.com

Sélénium: - L'élément n'a pas pu être défilé dans la vue

Bonjour, je suis confronté à une erreur mentionnée ci-dessous . Je ne peux pas cliquer sur le bouton de l'acheteur tel que mentionné dans la capture d'écran . J'ai essayé d'attendre, les fonctions de veille aussi . ce. Quelqu'un peut-il m'aider?.

Quelqu'un peut-il m'aider s'il vous plaît dans ceci: - Le code d'élément d'inspection est Le code est: - 

driver.findElement(By.name("login")).click();  //Click on login button
    System.out.println("hello world-----4");

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {

        e.printStackTrace();
    }   
    System.out.println("hello world-----5");
    WebElement element = driver.findElement(By.xpath("//*
[@id=\"modeuser\"]/div/ul/li[3]"));
    ((JavascriptExecutor) 
driver).executeScript("arguments[0].scrollIntoView(true);", element);
    element.click();                                                                                    
//Click on usertype



Error:-  

Exception in thread "main" 
org.openqa.Selenium.ElementNotInteractableException: Element <li 
class="buyer_border changeusermode "> could not be scrolled into view
Build info: version: '3.9.0', revision: '698b3178f0', time: '2018-02-
05T14:56:13.134Z'
System info: Host: 'CLAVAX-PC-93', ip: '192.168.2.122', os.name: 'Windows 
10', os.Arch: 'AMD64', os.version: '10.0', Java.version: '1.8.0_161'
Driver info: org.openqa.Selenium.firefox.FirefoxDriver
Capabilities {acceptInsecureCerts: true, browserName: firefox, 
browserVersion: 58.0.2, javascriptEnabled: true, moz:accessibilityChecks: 
false, moz:headless: false, moz:processID: 14260, moz:profile: 
C:\Users\Rahul\AppData\Loca..., moz:webdriverClick: true, pageLoadStrategy: 
normal, platform: XP, platformName: XP, platformVersion: 10.0, rotatable: 
false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}}


HTML is :- 

<div class="right hide-on-med-and-down head_right_mar" id="modeuser">
               <!--  <div class="toggleWrapper">
                  <input class="dn" type="checkbox" id="dn" value="1"/>
                  <label class="toggle" for="dn"><span class="toggle__handler"></span></label>
                </div> -->

                <div class="right_toggle">
                                            <ul>
                        <li data-get="seller" class="changeusermode active">
                            <span>Seller</span>
                                                                <span class="nav_span">On</span>

                        </li>


                        <li class="mid_toggle">  
                            <div class="switch">
                            <label>

                              <input class="changeusermode_btn" type="checkbox" data-on="Yes" data-off="No">
                              <span class="lever"></span>
                            </label>
                          </div>
                        </li>


                        <li data-get="buyer" class="buyer_border changeusermode ">
                            <span>Buyer</span>

                                <span class="nav_span">Off</span>                                     

                        </li>
                    </ul>
                </div>


            </div>

Quelqu'un peut-il m'aider? Quelqu'un peut-il m'aider? Est-ce que quelqu'un peut m'aider? .. Quelqu'un peut-il m'aider?.

6
RAHUL

Tout d’abord, vérifiez que l’élément est bien dans votre cadre.

Si ce n'est pas le cas, vous devrez passer au bon cadre pour cliquer sur l'élément:

driver.switchTo().frame(driver.findElement(By.name("iframeWithElement")));

En outre, vous pouvez effectuer plusieurs étapes pour améliorer la stabilité en cliquant sur différents éléments de l'interface utilisateur:

  • Explicitement attend qu'il soit presence dans le DOM
  • Scroll dans la vue des éléments
  • Vérifiez si cliquable

Est-ce que cela a aidé la stabilité?

WebDriverWait wait = new WebDriverWait(driver, 3)
JavascriptExecutor js = ((JavascriptExecutor) driver)

//presence in DOM
wait.until(ExpectedConditions.presenceOfElement(By.id("ID")));

//scrolling
WebElement element = driver.findElement(By.id("ID")));  
js.executeScript("arguments[0].scrollIntoView(true);", element);

//clickable
wait.until(ExpectedConditions.elementToBeClickable(By.id("ID")));

Donc, par exemple, si je travaille sur le site , je vais utiliser Wait.until(ExpectedConditions.presenceOfElement(By.class("article-feed-title")));

7
Stas

Peut être causé par ce bogue existant: https://bugzilla.mozilla.org/show_bug.cgi?id=1422272

3
Mike Cook

J'ai eu un problème similaire dans Firefox mais (première fois quand je clique sur Hover-menu, il est capable d'activer l'élément principal, puis je clique sur le sous-élément mais pour la deuxième fois, j'ai essayé de cliquer sur un autre sous-élément je reçois une erreur) . Erreur: "L'élément ne peut pas défiler dans la vue" . J'ai ouvert le sous-menu suivant dans une autre fenêtre qui fonctionnait pour moi.

WebElement element = driver.findElement(By.xpath("//div[2]/ul/li[3]/a"));
WebDriverWait wait = new WebDriverWait(driver, 30); //here, wait time is 20 sec
wait.until(ExpectedConditions.visibilityOf(element)); //this will wait for element to be visible for 20 seconds
element.click(); //now it clicks on element
Thread.sleep(8000);
driver.findElement(By.xpath("//li[3]/ul/li/a")).click();

if(driver.getTitle().equals("Invoice Search")) {

test4.log(LogStatus.PASS, "Navigated to Invoice Search Page");
}
2
srinu ratnala

Vous pouvez essayer cette version qui défile jusqu'à la position x, y de l'élément:

public static void scrollIntoView(WebElement ele) {
    ((JavascriptExecutor)driver).executeScript("window.scrollTo(" + ele.getLocation().x + "," + ele.getLocation().y + ")");
}
2
Bill Hileman

J'ai eu le même problème dans Firefox (dans Chrome et Opera, cela fonctionne bien). Essayez de changer JavascriptExecutor en Actions:

Actions action = new Actions(driver);
action.moveToElement(element).click().perform();
0
Radek Sip

Au lieu de scrollingToView, cliquez simplement sur cet élément 

driver.execute_script("arguments[0].click();", element)
0
Zoran Pandovski