Ошибка инициализации целочисленного массива Java [дубликат]

Я нашел, самый простой способ справиться с этими JS postbacks - это ждать, пока элемент, на который влияет загруженность, будет устаревшим или не будет найден.

Вот примерная функция:

def waitForElementRemoved(Element, WaitCount, WaitTime):
    ElementRemoved = False
    WaitTry = 0
    while not ElementRemoved:
        try:
            if WaitTry > WaitCount:
                raise Exception("Element not removed from page in alloted time")
            Test = Element.text
            WaitTry += 1
            time.sleep(WaitTime)
        except (NoSuchElementException, StaleElementReferenceException):
            ElementRemoved = True

И тогда я бы выбрал элемент, на который повлиял этот postback load, и передать его функции вместе с некоторыми аргументами времени.

, например:

driver = webdriver.Firefox()
driver.get("https://www.avis.co.in")
removedElement = driver.find_element_by_id("DrpCity")
mySelect = Select(driver.find_element_by_id("DrpCity"))
mySelect.select_by_visible_text("Pune")
waitForElementRemoved(removedElement, 10, .5)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='txtPickUp']"))).send_keys("XYZ")

Я не знаю, является ли это лучшим способом обработки событий JavaScript onchange load, но в моем случае он имеет был очень эффективен.


Чтобы добавить к этому ответу : я обнаружил, что ожидание, пока элемент устареет, не всегда работает, когда есть несколько событий загрузки, у меня есть что использование этого метода вместе с использованием приведенного ниже кода работает намного эффективнее, чтобы убедиться, что эти события динамической нагрузки завершены: (я адаптировал приведенный ниже код из ЗДЕСЬ )

# Wait for AJAX (Jquery or JS) dynamic page load events
class DynamicLoadState:
    def __call__(self, driver):
        LoadComplete = False
        JQueryLoadComplete = False
        JSLoadComplete = False
        try:
            if driver.execute_script("return jQuery.active") == 0: JQueryLoadComplete = True
        except Exception:
            # JQuery is not present on page
            JQueryLoadComplete = True
        if driver.execute_script("return document.readyState") == 'complete': JSLoadComplete = True
        if JQueryLoadComplete and JSLoadComplete: LoadComplete = True
        return LoadComplete

def WaitForDynamicLoad(driver, WaitTime):
    WebDriverWait(driver, WaitTime).until(DynamicLoadState())

# Use the first method of waiting for the element to go stale
# then run this to make sure all loading is completed

WaitForDynamicLoad(driver, Counts.WaitTime)

Надеюсь, это поможет кому-то использовать time.sleep() в будущем для загрузки страницы!

38
задан Makoto 26 July 2015 в 04:11
поделиться

6 ответов

В Java и некоторых других языках целочисленный литерал, начинающийся с 0, интерпретируется как восьмеричная (база 8).

Для одноразрядных чисел (кроме 08 и 09, которые не допускаются), результат будет таким же, поэтому вы можете не заметить, что они интерпретируются как восьмеричные.

Например:

010 ==  8
024 == 20

Поскольку восьмеричные литералы обычно не то, что вы хотите, вы всегда должны заботиться о том, чтобы никогда не начинать целостный литерал с 0, если, конечно, вы на самом деле не пытаетесь написать нуль.

56
ответ дан Stuart Cook 26 August 2018 в 15:26
поделиться

В Java, если вы определяете int с ведущим «0», означает, что вы определяете число в Octal.

int a = 08 выдает ошибку вне диапазона, потому что нет никакого число '8' в октябре. Octal предоставляет только 0-7 номеров.

Если вы определяете a = 07, то это не дает ошибку вне диапазона, потому что цифры «0» и «7» находятся в пределах Octal.

2
ответ дан Avijit Karmakar 26 August 2018 в 15:26
поделиться

Любое число с префиксом 0 считается восьмеричным. Восьмеричные числа могут использовать только цифры 0-7, так же как десятичное число может использовать 0-9, а двоичный код может использовать 0-1.

// octal to decimal
01  // 1
02  // 2
07  // 7
010 // 8
020 // 16

// octal to binary (excluding most significant bit)
01  // 1 
02  // 10
07  // 111
010 // 1000 
020 // 10000

Есть 10 типов людей, которые понимают троичные, те, кто этого не делает, и те, кто думает, что это глупая шутка.

13
ответ дан cwallenpoole 26 August 2018 в 15:26
поделиться

Ведущий нуль означает, что значение находится в восьмеричном. 8 не является восьмеричной цифрой, не более 2 действителен в двоичном выражении или G имеет значение в шестнадцатеричном формате.

2
ответ дан duskwuff 26 August 2018 в 15:26
поделиться

На большинстве языков программирования, таких как Java и C/C++, число с начальным нулем интерпретируется как восьмеричное число . Как известно, восьмеричные числа представлены только в пределах от 0 до 7. Следовательно, числа, подобные 05, 03, 054, действительны, но числа, подобные 078, 0348, 09, 08, имеют тенденцию к недействительности.

1
ответ дан j2ko 26 August 2018 в 15:26
поделиться

Из спецификации Java :

Октальная цифра состоит из цифры ASCII 0, за которой следует одна или несколько цифр ASCII от 0 до 7 и может представлять собой положительное, нулевое или отрицательное целое.

3
ответ дан Mahmoud Hossam 26 August 2018 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: