Beh dare un'occhiata nella sorgente di Java, mi dice che è fondamentalmente facendo due cose per determinare se si tratta di 'cliccabile':
https://code.google.com/p/selenium/source/browse/java/client/src/org/openqa/selenium/support/ui/ExpectedConditions.java
In primo luogo, sarà verificare se è 'visibile', utilizzando lo standard ExpectedConditions.visibilityOfElementLocated
, sarà quindi sufficiente verificare se lo element.isEnabled()
è true
oppure no.
Questo può essere condensato un po ', questo significa (semplificato, in C#):
- Attendere che l'elemento viene restituito dal DOM
- Attendere proprietà dell'elemento
.Displayed
è vero (che è essenzialmente cosa sta verificando per visibilityOfElementLocated
).
- Attendere fino a quando la proprietà
.Enabled
dell'elemento è vera (che è essenzialmente ciò che viene verificato da elementToBeClickable
).
vorrei attuare questo in questo modo (aggiungendo sul set corrente di ExpectedConditions
, ma ci sono diversi modi di farlo:
/// <summary>
/// An expectation for checking whether an element is visible.
/// </summary>
/// <param name="locator">The locator used to find the element.</param>
/// <returns>The <see cref="IWebElement"/> once it is located, visible and clickable.</returns>
public static Func<IWebDriver, IWebElement> ElementIsClickable(By locator)
{
return driver =>
{
var element = driver.FindElement(locator);
return (element != null && element.Displayed && element.Enabled) ? element : null;
};
}
utilizzabili in qualcosa di simile:
var wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
var clickableElement = wait.Until(ExpectedConditions.ElementIsClickable(By.Id("id")));
Tuttavia , potresti avere un'idea diversa di cosa cliccabile potrebbe significare, nel qual caso, questa soluzione potrebbe non funzionare - ma è una traduzione diretta di ciò che il codice Java sta facendo g.
Thank u Il problema di cui sopra ho detto era dovuto al fatto c'era blocco ui, ho risolto, la soluzione ha aiutato a risolvere un problema diverso, ancora una volta ringraziare soluzione u.Your è corretta soluzione e rappresenta l'isClickAble correttamente –
Questa soluzione non garantisce che quell'elemento sia * Facoltativo *. L'elemento potrebbe essere 'visualizzato' e' abilitato', tuttavia * non selezionabile * a causa di ** l'altro elemento riceverebbe il clic **. –
@AlexOkrushko, espandi cosa intendi, fornisci scenari riproducibili, esempi, errori completi ecc. Mi aspetterei che il messaggio di errore venga coperto quando si controllano entrambi ".Displayed" e ".Enabled" ma non è una cosa sicura, lì potrebbero essere casi limite - quindi ti chiederei gentilmente di presentarti uno scenario reale, non è così.Questo dovrebbe quindi essere presentato come un problema agli sviluppatori di Selenium. – Arran