3

Я попытался найти любое решение, но мне ничего не помогло.Selenium webdriver: IE 11 element.Click() не работает

У меня есть этот элемент

<span data-lkd="GUI-411396" data-lkta="tc" data-lkda="title" class="panelbar_item" title="Hledat">Form</span> 

В Selenium я найти его с

IWebElement form = GetElementAndWaitForEnabled(By.CssSelector("span[data-lkd=\'GUI-411396\']")); 

Это не проблема этой части. Но если попробовать нажать на этот элемент в IE11 ничего случилось

find.Click() 

Я пробовал некоторые решения, как:

driver.SwitchTo().Window(driver.CurrentWindowHandle); 
find.SendKeys(Keys.Enter); 
find.Click(); 

Но ничего не случилось. В Chrome и Firefox нормальный клик по элементу. Если я клик в других элементах, например, кнопка работает на IE 11. Но мне нужно щелкнуть по этому элементу.

Я использую Selenium v2.46.0, IE 11 (x86, x64).

ответ

2

С IE всегда нужно что-то дополнительное сделать. Попробуйте этот "специальный" трюк:

IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
js.ExecuteScript("arguments[0].click();", find) 
0

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

Как в стороне хорошая практика, чтобы помнить, чтобы всегда прокручивать элемент в поле зрения, функция примера обертки будет:

public static void clickElementAsUser(WebDriver driver, By by) 
{ 
    WebElement element; 

    try 
    { 
     element = driver.findElement(by); 
     scrollElementIntoView(driver, element); 
     Thread.sleep(100); //Wait a moment for the element to be scrolled into view 
     element.click(); 
    } 
    catch(Exception e) //Could be broken into multicatch 
    { 
     //Do Something 
    } 
} 

public static void scrollElementIntoView(WebDriver driver, WebElement element) 
{ 
    try 
    { 
     ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element); 
    } 
    catch(Exception e) 
    { 
     //Do Something 
    } 
} 

Если вы размещаете небольшой образец кода, что является aroudn пролета МОГУ быть в состоянии помочь дальше. Удачи!

Тайлер

+0

Вместо того, чтобы ждать в ожидании 100мс, Thread.sleep (100), это лучшая практика ждать элемента, чтобы быть видимым, только мое личное предпочтение. :-) –

+0

Очень верно, сон может привести к чрезмерному ожиданию или ожиданию. – TOlson05

Смежные вопросы