wait.until (ExpectedConditions.elementToBeClickable) не ожидает указанное время - PullRequest
0 голосов
/ 06 февраля 2019

Использование Использование Selenium WebDriver с Java, и я хочу щелкнуть по элементу, который присутствует на странице и является видимым, но отображается серым цветом, т. Е. Элемент присутствует на странице, но тот же не является неразрешимым.

Итак, я использую ExplicitWebDriverWait, чтобы дождаться, когда этот элемент станет кликабельным, и для этого я использую строку кода ниже.Но то же самое не работает.Водитель не ждет, когда элемент станет неразрешимым.Это исключение, "is not clickable at point (415, 765). Other element would receive the click:".

Теперь, если вместо этого Explicit Waint я использую static wait, я могу нажать на элемент.

Код, который я написал:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@name='mobile']")));
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@name='mobile']")));
newNum.click();

Журнал сценариев:

Trying to locate: By.xpath: //*[@name='mobile']
Located element:By.xpath: //*[@name='mobile']
Trying to locate: By.xpath: //*[@name='mobile']
Located element:By.xpath: //*[@name='mobile']
Trying to locate: By.xpath: //*[@name='mobile']
Located element:By.xpath: //*[@name='mobile']
Trying to click on:[[ChromeDriver: chrome on XP (7686dd92e2bb577696qa2e1aa13effd6)] -> xpath: //*[@name='mobile']]
Exception occured:org.openqa.selenium.WebDriverException: unknown error: Element <input id="abc-radiobox-2032-inputEl" data-ref="inputEl" type="text" role="combobox" size="1" name="mobile" placeholder="- select option -" readonly="readonly" class="dummyclass" autocomplete="off" componentid="gwc-combobox-2032"> is not clickable at point (415, 765). Other element would receive the click: <div class="anotherclass" role="status" id="loadmask-1985" tabindex="0" componentid="loadmask-1985" style="">...</div>
  (Session info: chrome=71.0.3578.98)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e1234de03a32ff6c197e),platform=Windows NT 10.0.10586 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

В зависимости от получаемой ошибки:

Исключение: не активируется в точке (415, 765).Другой элемент получит щелчок:

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

Попробуйте следующий код: убедитесь, что значение локатора элемента должно быть достаточно хорошимчтобы найти элемент уникально:

WebElement element = driver.findElement(By.xpath("//*[@name='mobile']")); JavascriptExecutor Js = (JavascriptExecutor)driver; Js.executeScript("arguments[0].clicks();", element)

Этот код всегда работает для меня.Иногда мне нужно вставить метод scrollIntoView(), чтобы прокрутить страницу до элемента и выполнить над ним действие.

0 голосов
/ 15 февраля 2019

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

Шаги

1.Создать сеанс браузера Firefox

2.Найдите на страницу согласно вашему требованию

3.Подождать, пока веб-элемент (// * [@ name = 'mobile']) не будет виден [подождать примерно 15 секунд]

[Что такое веб-элемент?Ответ: Независимо от того действия, которое вы собираетесь выполнить с этим элементом.Этот элемент может быть кнопкой, ссылкой, значком, текстовым полем и т. Д.].

4. Теперь проверьте элемент, он находится в состоянии нажатия (состояние включения) или нет

5.Если он находится в кликабельном состоянии (состояние включения), выполните операцию щелчка.

public void test_01_ButtonClick()
{
WebDriver driver = new FirefoxDriver();
driver.navigate().to("www.hlo.com");            

//Here will check element is visible or not 
waitForElementInDOM(driver, "//*[@name='mobile']", 15); 

//Here will check element is enable or not
boolean enable = elementIsEnable(driver, "//*[@name='mobile']");    
if(enable)
{
driver.findElement(By.xpath("//*[@name='mobile']")).click();
}
else
{
System.out.println("Element not visible. Please increase your waiting time");
}
}

----------------------------------------------------------------------------

public void waitForElementInDOM(WebDriver driver,String elementIdentifier, long 
timeOutInSeconds) 
{       
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds );
try
{           
//this will wait for element to be visible for 15 seconds        
wait.until(ExpectedConditions.visibilityOfElementLocated
(By.xpath(elementIdentifier))); 
}
catch(NoSuchElementException e)
{           
e.printStackTrace();
}           
}

-------------------------------------------------------------------------------

public boolean elementIsEnable(WebDriver driver, String elementIdentifier)
{
WebElement element = driver.findElement(By.xpath("elementIdentifier"));
if(element.isEnabled())
{
return true;
}
else 
{
return false;
}       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...