2012-01-03 24 views
7

(Ho guardato molti altri posti simili su SO e sono, purtroppo, non è stato in grado di risolvere questo problema, quindi ecco qui ...)selenio WebDriver Click() ha esito negativo con IE9

sto usando Selenio WebDriver (implementazione C#, versione 2.15) per guidare una pagina web abbastanza semplice. La pagina contiene un modulo con due input < per nome utente e password e un input < per l'invio del modulo. Posso inserire correttamente i valori per nome utente e password, ma la chiamata Click() sul pulsante di invio sembra non avere alcun effetto.

Per altre raccomandazioni, ho provato i seguenti trucchi, nessuno dei quali ha lavorato:

  • Change finestra messa a fuoco per currentWindowHandle
  • Clicca sul genitore dell'elemento, poi sull'elemento
  • Aggiungi un lunga attesa implicita
  • Aggiungere una lunga attesa esplicita (dormendo 20 secondi)
  • Fare clic su un sacco di volte sull'elemento
  • Usa Submit() al posto di Click()
  • inviare i tasti "\ n" per l'elemento (rapporti Selenio questo come un errore)

Nota che ho verificato che il pulsante < input> è effettivamente trovato con successo, quindi non sembra essere un problema.

Inoltre, si noti che ho verificato che il pulsante funzioni effettivamente al di fuori del Selenium-land. Cioè, posso navigare sul sito, inserire le credenziali di accesso e fare clic sul pulsante di invio (e funziona!).

Inoltre, si noti che questo problema si trova su IE. Non si verifica per me con Chrome e FF7.

Detto questo, qualcuno ha altre idee?

risposta

5

Il sito è disponibile per il test? Il tuo IE zoom level è al 100%? Si tratta di un requisito per eventi click nativi di lavorare da documentazione livello di zoom here

Il browser deve essere impostato su 100% in modo che il mouse nativo eventi possono essere impostati per le coordinate corrette.

Se questo non funziona, sembra un errore nel webdriver. È necessario aprire un problema here.

Detto questo, si potrebbe probabilmente passare la rotta di script Java nel frattempo come soluzione temporanea. Qualcosa di simile,

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()"); 
+0

Come si imposta il livello di zoom IE? –

+0

Sì, è davvero il livello di zoom. Grazie! Anche se ho davvero bisogno di un modo per rilevare e/o impostare il livello di zoom in modo programmatico. Non riesco a far fallire i miei test per tutto questo tempo ... –

2

Sembra che potrebbe essere un problema con dove si verifica il clic del mouse. Ho provato ad utilizzare il meccanismo delle azioni in selenio per forzare un clic del mouse con un po 'di offset. Fa clic sull'elemento con successo:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform(); 
1

Ho avuto questo problema.Non riesco a ricordare il posto dove ho trovato la risoluzione, ma ho scoperto che le seguenti ha lavorato per me:

su un pulsante:

var navButton = driver.FindElement(By.Id("NavButton")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton); 

funziona ogni volta.

Avevo anche problemi nell'invio dell'evento click a una riga della tabella. A volte il .click() in realtà invia l'evento alla riga sopra (abbiamo una struttura di tabella orribilmente complicata che contiene un pulsante di opzione nascosto che non è anche selezionabile con selenio). L'hack sopra non funzionerebbe con le celle che erano accessibili attraverso un FindElement.

Alla fine l'unica cosa che ha funzionato è stata selezionare l'immagine all'interno di quella riga e inviare il clic.

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img); 

Spero che questo aiuti.

-1

Un'altra possibile soluzione può essere come ripetere cliccando come:

Btn.click(); 
Btn.click(); 

Perché prima click è sufficiente impostare messa a fuoco e 2 ° uno esegue la reale clicca. Ha funzionato per me.

+2

Il problema è che se esegui test con più browser, il primo clic esegue un'azione, quindi il secondo clic genera un'eccezione perché non riesce a trovare l'elemento. – boolean

1

Vedo più soluzioni qui, ma ho pensato di condividere ciò che ha funzionato per me nel caso in cui qualcun altro avesse bisogno di un approccio diverso. Ho avuto un problema simile, per me la soluzione è stata semplice come fare clic utilizzando un metodo diverso

Per esempio

btn.Sendkeys(Keys.Enter); 
0

Usa FindElement(By.CSSSelector("'CSSPath'")); Se hai un codice CSS applicato, è più coerente scrivere altre dichiarazioni multiple per trovare l'elemento con mezzi alternativi come ID, tag o così con il metodo WebDriverWait

0

Potrebbe essere necessario impostare Abilita eventi nativi su "true" quando lo si esegue su IE e se si desidera eseguire lo stesso codice in FF e Chrome, è necessario abilitare gli eventi nativi su "true" anche in quei browser.

È possibile farlo quando si imposta il browser su cui si desidera eseguire.

0

codice Try -

driver.FindElement(By.Id("btn")).sendkeys("\n"); 
0

provare questo ..
WebElement hiddenWebElement = d.findElement (By.xpath (XPath));
((JavascriptExecutor) d) .executeScript ("arguments [0] .click()", hiddenWebElement);

0

Il seguente lavorato per me:

@FindBy(id = "submit_action") 
WebElement submitButton_; 
... 
public void clickSubmit() { 

    if (driver_ instanceof InternetExplorerDriver) { 
     ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_); 
    } 
    else { 
     submitButton_.click(); 
    } 
} 

Come fireEvent è supportato solo da IE quindi l'alternativa.

Problemi correlati