Используя Selenium, есть ли другой, более надежный способ использовать команду click для элемента в Headless Chrome? - PullRequest
0 голосов
/ 19 сентября 2019

После 2 дней борьбы с ошибочной командой click () в Headless Chrome - в моем случае с элементом Anchor (a) с тегом href - и прохождением по различным потокам советов о chromeOptions (--start-maximized, --window-size и т. д.) и пытается 12 различными способами (с sendKeys и Actions и даже submit ()), чтобы обойти click () безуспешно ...

Использование ChromeDriver 77.0, Chrome 77.0.3865.75 и Selenium 3.141.59, мои тесты стабильны в Chrome и нестабильны в Headless Chrome из-за этого ошибочного щелчка ():

Например: Нажмите наelement (в моем случае это элемент anchor (a) с тегом href), как в Chrome, так и в Headless Chrome, и проверьте, что после этого появляется другой элемент

Добавление цикла и попытка catch ниже стабилизируют мои тесты и дают их результатынадежно!Есть ли другой способ, о котором вы можете подумать?

Test() {
    for(int t = 0; t <= 2; t++) { //TRY CLICKING ON THE ELEMENT 3 TIMES
        WebElement element = 
    wait.until(ExpectedConditions.presenceOfElementLocated(elementToFind));
        wait.until(ExpectedConditions.visibilityOf(element));
        wait.until(ExpectedConditions.elementToBeClickable(element));

        try {
            element.click(); //ERRATIC CLICK() ON HEADLESS CHROME

 if(wait.until(ExpectedConditions.visibilityOfElementLocated(expectedElementAfterClick)).isDisplayed() == true)
                break; //BUTTON WAS REALLY CLICKED
          } catch (TimeoutException toe) { //BUTTON WASN'T REALLY CLICKED
                if (t == 2) toe.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
                break;
            }
     }
}

Я говорю "click () ошибочен в Headless Chrome", потому что команда click () всегда выполняется успешно (в противном случае NoSuchElement или StaleElementReferenceException илилюбое другое исключение будет найдено при нажатии на элемент) НО, иногда , элемент фактически не нажат . В других случаях , тот же самый тест и код выполняется гладко, и элемент фактически щелкается - я знаю это, потому что строка с visibilityOfElementLocated (ОжидаемыйElementAfterClick) выполняется, как и ожидалось.Эта проблема click (), в свою очередь, делает мои тесты нестабильными. Таким образом, результаты ненадежны .

Я подозреваю, что это действительно проблема Selenium.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Для краткости и простоты, если ваш сценарий использования должен вызывать click() на определенном WebElement presenceOfElementLocated() и visibilityOf() не помогут, и вам нужно вызвать WebDriverWait для elementToBeClickable(), и вы можете использовать следующее решение:

try {
  new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(element).click();
  System.out.println("Element was clicked")
}
catch(TimeoutException e) {
  System.out.println("Element wasn't clicked")
}

Подробное обсуждение можно найти в Селен: проверка на наличие элемента

Дополнительные соображения

Убедитесь, что:

0 голосов
/ 19 сентября 2019

У меня тоже были такие редкие обстоятельства.Вместо этого вы можете попробовать использовать ActionChains.Прошло много времени с тех пор, как я что-то писал на Java, но на Python код выглядел бы примерно так:

# find your element using WebDriverWait, as you have above
ActionChains(self.driver).move_to_element(element).click().perform()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...