web-dev-qa-db-ja.com

Selenium Webdriver:要素が表示されない例外

これは、これで簡単なログインボタンをクリックするための私のコードです Website

import Java.util.concurrent.TimeUnit;

import org.openqa.Selenium.By;    
import org.openqa.Selenium.WebDriver;    
import org.openqa.Selenium.firefox.FirefoxDriver;    

public class Reports {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        driver.get("https://platform.drawbrid.ge");
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        driver.findElement(By.xpath(".//*[@id='_loginButton']")).click();

    }
}

次のエラーが発生します。

スレッド「メイン」の例外org.openqa.Selenium.ElementNotVisibleException:要素は現在表示されていないため、コマンドの継続時間またはタイムアウトと相互作用しない可能性があります:2.05秒

6
Nik_stack

このページには、指定されたxpathを持つ2つのボタンがあります。最初は表示されません。そのため、ElementNotVisibleExceptionが発生します。

1つは<div class="loginPopup">

2番目(必要なもの)は<div class="page">

したがって、xpathを次のように変更すると、問題が修正されます。

By.xpath("//div[@class='page']//div[@id='_loginButton']")
15
Dmitry

ページにはid="_loginButton"を含む3つの要素さえあり、1つだけが表示されます-ログインフォーム内にあるものは、取得できますそれはCSSセレクターによって:

By.cssSelector("form#_loginForm div#_loginButton")
3
alecxe

id="_loginButton"は3回出現しています。

CssSelectorによってid="_loginButton"の下のclass="signIn"を使用して、ページ内の正確なボタンを取得しました。

By.cssSelector("div.signIn div#_loginButton")
2

あなたは試すことができます:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("your locator value")));

または

wait.until(ExpectedConditions.ElementIsVisible(By.xpath("your locator value")));
0
Dor leon
public static void Listget (WebDriver driver) throws Exception 

{
    Thread.sleep(5000);
    UtilityMethod.getAppLocaters(driver, "closeicon").click();

    Actions action = new Actions(driver);
    WebElement we = driver.findElement(By.xpath("//li[@class='parent dropdown  aligned-left']"));
    Thread.sleep(5000);
    action.moveToElement(we).build().perform();

    List<WebElement>links = driver.findElements(By.xpath("//span[@class='menu-title']"));
    int total_count = links.size();       
    System.out.println("Total size :=" +total_count);           
     for(int i=0;i<total_count;i++)
        {             
            WebElement  element = links.get(i);
            String text = element.getAttribute("innerHTML");
            System.out.println("linksnameis:="  +text);

            try{
                    File src = new File("D:ReadFile.xlsx");
                    FileInputStream fis = new FileInputStream(src);
                    XSSFWorkbook wb=new XSSFWorkbook(fis);
                    XSSFSheet sh = wb.getSheetAt(0);

                    sh.createRow(i).createCell(1).setCellValue(text);

                    FileOutputStream fos = new FileOutputStream(new File("D:/ReadFile.xlsx"));
                    wb.write(fos);
                    fos.close();
                }
                catch(Exception e)
                {
                    System.out.println(e.getMessage());
                }


        }
    }
}
0
Kishore Paul

ウィンドウがremote serverは十分に大きいので、スペースの制約のために要素は非表示になりません。

これは私のために働きました:(私はc#

driver.Manage().Window.Size = new System.Drawing.Size(1928, 1060);
0
jacquestheron

Webdriverは、同じロケーターを持つ要素が複数あり、ElementNotVisibleがロケーターに一致する要素の1つをすでに操作している場合に、Webdriver例外をスローすることがあります。

このようなシナリオでは、最初に要素のサイズを取得できます

int var_ele_size= driver.findElements(By.xpath("locator")).size();

そしてリストから最初の要素を取り、要素をクリックします。

driver.findElements(By.xpath("locator")).get(var_ele_size-1).click();
0
SelThroughJava