Selenium Webdriver: как подождать, пока индикатор выполнения исчезнет, ​​и нажмите кнопку [duplicate]

Если ваш столбец даты является строкой формата '2017-01-01', вы можете использовать pandas astype для преобразования его в datetime.

df['date'] = df['date'].astype('datetime64[ns]')

или использовать datetime64 [D], если вы хотите, чтобы точность дня, а не наносекунды

print(type(df_launath['date'].iloc[0]))

дает

<class 'pandas._libs.tslib.Timestamp'> то же самое, что и при использовании pandas.to_datetime

Вы можете попробовать его с другими форматами, тогда «% Y-% m-% d», но по крайней мере это работает.

29
задан DebanjanB 11 June 2018 в 10:29
поделиться

5 ответов

WebDriverException: элемент не кликабельен в точке (x, y)

Это типичный org.openqa.selenium.WebDriverException , который продолжается java.lang.RuntimeException.

Поля этого исключения:


О вашей индивидуальной usecase ошибка сообщает все:

WebDriverException: Element is not clickable at point (x, y). Other element would receive the click 

Из вашего кодового блока видно, что вы wait определены как WebDriverWait wait = new WebDriverWait(driver, 10);, но вы вызываете метод click() для элемента до того, как ExplicitWait вступает в игру, как в until(ExpectedConditions.elementToBeClickable).

Решение

Ошибка Element is not clickable at point (x, y) может возникать из-за разных факторов. Вы можете обратиться к ним с помощью одной из следующих процедур:

1. Элемент не получает клика из-за присутствия JavaScript или вызовов AJAX

Попробуйте использовать Actions Класс:

WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();

2. Элемент не получает щелчок, поскольку он не находится в пределах Viewport

Попробуйте использовать JavascriptExecutor, чтобы привести элемент в Viewport:

WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement); 

3. Страница становится обновленной до того, как элемент становится доступным.

В этом случае вызывают ExplicitWait i.e WebDriverWait, как указано в пункте 4.

4. Элемент присутствует в DOM, но не доступен для клика.

В этом случае вызывать ExplicitWait с ExpectedConditions, установленным на elementToBeClickable, для элемента, который можно щелкнуть:

WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));

5. Элемент присутствует, но имеет временное наложение.

В этом случае вызывать ExplicitWait с ExpectedConditions, установленным на invisibilityOfElementLocated, чтобы наложение было невидимым.

WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));

6. Элемент присутствует, но имеет постоянный Overlay.

Используйте JavascriptExecutor, чтобы отправить клик непосредственно на элемент.

WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);
65
ответ дан DebanjanB 15 August 2018 в 18:40
поделиться
  • 1
    Я очень ценю это объяснение. – zoram 14 February 2018 в 12:35
  • 2
    К # 6 / # 2 выше: метод .ExecuteScript теперь доступен из самого веб-драйвера, а не для JavascriptExecutor. Спасибо за хорошо написанный ответ! – TaylorTheDeveloper 15 May 2018 в 20:25
  • 3
    Вы рассмотрели множество возможностей, в которых только 5 и 6 являются правильным способом обработки указанной ошибки. Первые четыре бросают разную ошибку, для которой решение, которое вы дали, не будет работать. Например, номер точки 3 - это проблема элементарного элемента, которая не работает, даже если вы долго будете ждать с помощью метода elementToBeClickble. Это нужно решать по-другому. – Rajagopalan 7 August 2018 в 07:59

Вы можете попробовать

WebElement navigationPageButton = (new WebDriverWait(driver, 10))
 .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton")));
navigationPageButton.click();
0
ответ дан fg78nc 15 August 2018 в 18:40
поделиться
  • 1
    Это не помогает мне. – Maria 4 July 2017 в 18:53
  • 2
    Вы получаете такую ​​же ошибку? – fg78nc 4 July 2017 в 18:55
  • 3
    Да: org.openqa.selenium.WebDriverException: Элемент не кликается в точке (36, 72). Другой элемент получит клик: & lt; div tabindex = & quot; 0 & quot; класс = & Quot; официант-UI-замок & Quot; & GT; & Lt; / дела & GT; Длительность или тайм-аут команды: 70 миллисекунд – Maria 4 July 2017 в 18:57
  • 4
    попробуйте следующее WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform(); – fg78nc 4 July 2017 в 18:59
  • 5
    Если я использую Thread.Sleep, тогда все работает. Но я использую Wait all fail. – Maria 4 July 2017 в 19:24

Я столкнулся с этой ошибкой, пытаясь щелкнуть какой-то элемент (или его наложение, мне все равно), а другие ответы не сработали для меня. Я исправил его, используя API-интерфейс elementFromPoint DOM, чтобы найти элемент, который Selenium хотел, чтобы я нажал на него:

element_i_care_about = something() loc = element_i_care_about.location element_to_click = driver.execute_script( "return document.elementFromPoint(arguments[0], arguments[1]);", loc['x'], loc['y']) element_to_click.click()

Надеюсь, это поможет кому-то!

0
ответ дан rescdsk 15 August 2018 в 18:40
поделиться

Если вам нужно использовать его с Javascript

, мы можем использовать аргументы [0] .click () для имитации операции щелчка.

var element = element(by.linkText('webdriverjs'));
browser.executeScript("arguments[0].click()",element);
4
ответ дан SirPeople 15 August 2018 в 18:40
поделиться
  • 1
    Работает! Я не могу представить, как это работает, но в противном случае он нажимает на слой overlay (ожидание закрытия оверлея «invisibilityOfElementLocated» занимает около 30 секунд). – Fisk 1 June 2018 в 10:48
  • 2
    – Chaudhry Waqas 22 October 2018 в 19:36

Прокрутка страницы до ближайшей точки, упомянутой в исключении, сделала трюк для меня. Ниже приведен фрагмент кода:

$wd_host = 'http://localhost:4444/wd/hub';
$capabilities =
    [
        \WebDriverCapabilityType::BROWSER_NAME => 'chrome',
        \WebDriverCapabilityType::PROXY => [
            'proxyType' => 'manual',
            'httpProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
            'sslProxy' => PROXY_DOMAIN.':'.PROXY_PORT,
            'noProxy' =>  PROXY_EXCEPTION // to run locally
        ],
    ];
$webDriver = \RemoteWebDriver::create($wd_host, $capabilities, 250000, 250000);
...........
...........
// Wait for 3 seconds
$webDriver->wait(3);
// Scrolls the page vertically by 70 pixels 
$webDriver->executeScript("window.scrollTo(0, 70);");

ПРИМЕЧАНИЕ. Я использую Facebook php webdriver

0
ответ дан Sudheesh.M.S 15 August 2018 в 18:40
поделиться
Другие вопросы по тегам:

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