>

'사용자 추가'버튼을 클릭하려면 어떻게합니까? XPath, 링크 텍스트, CSS 선택기로 시도했지만 아무것도 작동하지 않았습니다.

HTML

<div class="col-xs-12 col-md-6 col-sm-8">
    <div class="file-upload btn btn-default" style="margin-top:4px">
        <span>Browse</span>
        <input accept=".csv" class="upload" id="File" name="File" value="" type="file">
        <input data-val="true" data-val-number="The field IsImporting must be a number." data-val-required="The IsImporting field is required." id="IsImporting" name="IsImporting" value="0" type="hidden">
    </div>
    <button type="Submit" id="btnImport" style="margin-top:4px" class="btn btn-default greybutton">Import</button>
    <a href="/Config/ImportFormat/UserImportFormat.csv" style="margin-top:4px" class="btn btn-default bluebutton">Download Sample</a>
    <a href="javascript:void(0)" id="userAdd" style="margin-top:4px" class="btn btn-default bluebutton">Add User</a>
    <a href="javascript:void(0)" id="userHierarchy" style="margin-top:4px;display:none;" class="btn btn-default bluebutton">User Hierarchy</a>
</div>

내 코드

System.setProperty("webdriver.gecko.driver", "C:\\geckodriver-v0.20.1-win64\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.findElement(By.id("btnsubmit")).click();
Thread.sleep(5000);
// Waiting for Loading left menu and Clicking on 'Setup' button
// driver.findElement(By.id("userAdd")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("//*[@id=\'leftpaneldiv\']/ul/li[1]")).click();
// Click on 'Users' module
driver.findElement((By.cssSelector(".treeview > a:nth-child(1) > span:nth-child(1)"))).click();
Thread.sleep(5000);

  • 답변 # 1

    게시 한 사용자 추가 링크 HTML에 따라 사용한 로케이터가 작동해야합니다.

    driver.findElement(By.id("userAdd")).click();
    
    

    그렇지 않기 때문에 약 3 가지 중 하나가 문제가 될 수 있습니다.

    <올>

    일반적으로 가장 먼저해야 할 일은 로케이터가 작동하는지 확인하는 것입니다. 요소를 찾아서 페이지에서 고유하게 찾아야합니다. 이렇게하려면 브라우저 개발 콘솔을 사용해야합니다. $$("#userAdd") 를 실행  콘솔에서. 0으로 돌아 오면 2 단계로 건너 뛰고 1로 돌아 오면 3 단계로 건너 뛰십시오.>1로 돌아 오면 해당 ID가 페이지에서 고유하지 않으므로 세부 사항을 추가해야합니다. 로케이터는 원하는 요소 만 찾습니다. 도움이 필요하면 주변 HTML을 더 추가해야합니다.

    로케이터가 작동중인 경우 요소가 IFRAME 에 있는지 확인하십시오. . 그렇다면 컨텍스트를 IFRAME 로 전환해야합니다.  위치를 찾기 전에

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameLocator));
    
    

    페이지로드가 완료되면 요소가로드되지 않을 수 있으므로 대기를 추가해야합니다. 클릭하기 전에 요소가로드되지 않은 경우 찾을 수없는 것으로 표시됩니다.

    wait.until(ExpectedConditions.elementToBeClickable(By.id("userAdd"))).click();
    
    

  • 답변 # 2

    click() 를 호출하기 위해 공유 한 HTML에 따라  사용자 추가와 같은 텍스트가있는 요소에서 다음 코드 줄을 사용할 수 있습니다.

    driver.findElement(By.xpath("//a[@class='btn btn-default bluebutton' and @id='userAdd'][normalize-space()='Add User']")).click();
    
    

  • 답변 # 3

    가장 확실한 것은 :

    1. ID로 찾기

    WebElement el = driver.findElement(By.id("userAdd"));
    el.click();
    
    

    그렇지 않으면 전환해야 할 부모 요소가 있습니다.

    2. 프레임 또는 모달 찾기

    driver.switchTo().frame("modalFrameTitle");
    
    

    또는

    driver.switchTo().activeElement()
    
    

    그리고2 인 경우1.단계로 이동하여 요소를 찾아 상호 작용합니다.

  • 이전 list comprehension - 인덱스 검색으로 중첩 된 for 루프 속도를 높이는 방법 PYTHON
  • 다음 android - React-nativeProject에서 앱 폴더 경로를 찾는 방법