Chrome проверить, не могу найти элемент по xpath, который я только что скопировал - PullRequest
0 голосов
/ 25 октября 2018

У меня динамически отображается значок счетчика на странице, указывающий, что страница загружается, мне нужно определить, когда он исчезает (этот бит мне понятен)

Каждый раз, когда я нажимаю на этот счетчик в Google Chrome, проверяю, и я нажимаю copy xpath, я получаю это:

/html/body/vr-root/vr-route-handler/vr-layout/mat-sidenav-container/mat-sidenav-content/div/mat-sidenav-container/mat-sidenav-content/div/div/bs-campus/div/div/bs-data-grid/div/div[2]/mat-spinner/svg/circle

Но когда я пытаюсь найти этот элемент (даже внутри Chrome проверяйте инструмент нажатием CTR + F, он не находит его.

Есть ли другой способ найти его? Я пытался найти его с относительным xpath, но он тоже не удался:

.//div/mat-spinner

Редактировать: добавлен рисунок

enter image description here

Редактировать 2: когда я приостанавливаю страницу в Chrome Inspect -> Source -> Pause Выполнение скрипта, я могу искать и находить (ctr + f) элемент в chrome inspect по:

.//mat-spinner

, но когда страница запущена (а элемент все еще виден), она не может быть найдена.

Журнал ошибок при попытке доступа к нему с помощью веб-драйвера

org.openqa.selenium.TimeoutException: Expected condition failed: waiting for element to be clickable: By.xpath: .//div/mat-spinner (tried for 10 second(s) with 500 milliseconds interval)
        at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:113)
        at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:283)
        at base.StaticSeleniumDriver.getWebElement(StaticSeleniumDriver.java:362)
        at steps.BaseSteps.debugDrawSpinner(BaseSteps.java:55)
        at ?.Given Debug draw spinner(Campus.feature:190)
      Caused by: org.openqa.selenium.NoSuchElementException: Cannot locate an element using By.xpath: .//div/mat-spinner
      For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
      Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
      System info: host: 'BANNB061', ip: '10.0.75.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_181'
      Driver info: driver.version: StaticSeleniumDriver

Использование следующего кода:

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
return wait.until(ExpectedConditions.elementToBeClickable(By.xpath(xpath)));

1 Ответ

0 голосов
/ 25 октября 2018

Вот решение, которое я сделал в транспортире.Моя логика заключается в проверке наличия спиннера после взаимодействия с сайтом.Пример: нажмите на элемент, введите текст, навигацию по странице .. всплывающее окно и т. Д., Вы можете найти подходящее место, где его разместить.Надеюсь, это поможет, вы можете адаптировать его для любого языка.Селен API является распространенным.

Обратите внимание, что если вы нашли . // mat-spinner , используйте его как xpath для элемента.

export async function handleSpinner() {
    console.log('Checking if loading spinner is present on the page.');

    let spinner = element(by.css('div.spinner'));
    try {
        // setting minimal timeout to search for the element
        await browser.manage().timeouts().implicitlyWait(500);

        // trigger check if there is such element on the page. will throw exception if not present
        await spinner.getWebElement();

        console.log('Spinner has been found.. waiting.... up to 10 seconds.');
        await browser.wait(ExpectedConditions.invisibilityOf(spinner), 10000, 'Spinner is still present...');
        console.log('Spinner has disappeared.');
    } catch (ex) {
        // spiner is not present so ignore the exception
    } finally {
        // Setting browser implicit timeout back to the original configuration.
        await browser.manage().timeouts().implicitlyWait(10000);
    }
}
...