programing

요소가 표시되지 않음 오류(요소를 클릭할 수 없음)

starjava 2023. 2. 26. 08:40
반응형

요소가 표시되지 않음 오류(요소를 클릭할 수 없음)

웹 페이지에 표시되는 라디오 버튼을 클릭합니다.코드는 다음과 같습니다.

HTML 코드:

<div class="small-checkbox red-theme raleway-regular text-muted2 position-relative">

        <div class="city-checkbox inline-block position-relative" ng-class="{'rounded-checkbox': main.current_city_id == 1, 'mb-20': main.ifDeviceIsPhone}">
            <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect mh-20" for="mumbaiCity" ng-class="{'is-checked' : main.current_city_id == 1}">
                <input type="radio" id="mumbaiCity" class="mdl-radio__button position-relative vertical-middle" name="city" value="1" ng-click="main.setCity('Mumbai', 1)">
                <span class="mdl-radio__label position-relative font15"><img class="city-icon" src="../../../assets/img/cities/mumbai-icon.png">Mumbai</span>
            </label>
        </div>
</div>

테스크케이스:

// demo-test.js
describe('Protractor Demo App', function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000000;

    it('check item count', function() {
        browser.get('<link>');
        element(by.id('mumbaiCity')).click();
    });

});

이 테스트 스루 에러는 다음과 같습니다.

1) 굴절기 데모 앱 체크 항목 수

메시지:

실패: 요소가 표시되지 않음

또, 다음과 같이 시도했습니다.

element(by.css('[ng-click="main.setCity('Mumbai', 1)"]')).click();

에러가 발생합니다.

[16:16:26] E/launcher - 인수 목록 후 오류: SyntaxError: missing )

라디오 버튼을 클릭하는 방법을 제안해 주세요.

이것은 셀레늄에 의한 테스트 자동화에서 비교적 일반적인 문제입니다.

일반적인 솔루션은 다음과 같습니다.

  • 클릭할 요소가 실제로 표시되는지 확인합니다.경우에 따라서는 요소를 표시하기 위해 페이지에서 추가 작업을 수행해야 합니다.예를 들어, 옵션이 나타나도록 드롭다운을 열거나 하위 메뉴가 나타나도록 메뉴를 엽니다.
  • 요소가 표시될 때까지 기다립니다.

    var EC = protractor.ExpectedConditions;
    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.wait(EC.visibilityOf(mumbaiCity), 5000);
    mumbaiCity.click();
    
  • 같은 것을 가진 다른 요소가 있다id사실 보이지 않는 거죠.이 경우 이 특정 요소와 일치하도록 로케이터를 개선해야 합니다.예:

    element(by.css(".city-checkbox #mumbaiCity")).click();
    element(by.css(".city-checkbox input[ng-click*=Mumbai]")).click();
    
  • 또는 동일한 로케이터와 일치하는 요소가 여러 개 있는 경우 표시되는 요소를 "필터링"할 수 있습니다.

    var mumbaiCity = element.all(by.id('mumbaiCity')).filter(function (elm) {
        return elm.isDisplayed().then(function (isDisplayed) {
            return isDisplayed;
        });
    }).first();
    mumbaiCity.click();
    
  • 요소로 이동한 후 via를 클릭합니다.

    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.actions().mouseMove(mumbaiCity).click().perform();
    
  • 요소의 보기로 스크롤한 다음 다음을 클릭합니다.

    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.executeScript("arguments[0].scrollIntoView();", mumbaiCity.getWebElement());
    mumbaiCity.click();
    
  • javascript를 통해 클릭(다름의 차이점 제외):

    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.executeScript("arguments[0].click();", mumbaiCity.getWebElement());
    
  • 브라우저 창을 최대화하기만 하면 되는 경우가 있습니다.

    browser.driver.manage().window().maximize();
    

언급URL : https://stackoverflow.com/questions/37809915/element-not-visible-error-not-able-to-click-an-element

반응형