2016-07-12 14 views
4

Ich bin neu zu Selenium und müssen überprüfen, ob Element in SeleniumJava, da element.click() Pässe sowohl auf link und label anklickbar ist.Überprüfen Sie, ob Element anklickbar in Selenium Java

Ich habe versucht, unter Code aber nicht funktioniert:

WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10); 

if(wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]")))==null) 

eine Hilfe zu diesem Thema benötigen.

Antwort

3

wait.until(ExpectedConditions) wird nicht null zurückgeben, es wird entweder die Bedingung erfüllen oder TimeoutException werfen.

können Sie überprüfen, ob das Element und

WebElement element = driver.findElement(By.xpath); 
if (element.isDisplayed() && element.isEnabled()) { 
    element.click(); 
} 
+3

Es gibt Fälle, wenn 'element.isDisplayed() && Element.isEnabled() 'wird' true' zurückgeben, aber das Element kann nicht angeklickt werden, da Element von einem anderen Element verdeckt/überlappt wird. In diesem Fall ist Ausnahme abgefangen: 'org.openqa.selenium.WebDriverException: unbekannter Fehler: Das Element kann nicht an Punkt geklickt werden (781, 704). Anderes Element würde den Klick erhalten: ' –

7

elementToBeClickable zur Überprüfung ein Element sichtbar und aktiviert so verwendet wird aktiviert angezeigt wird, dass Sie es klicken.

ExpectedConditions.elementToBeClickable kehrt WebElement wenn erwartete Bedingung anders wahr ist, wird es TimeoutException werfen, es nie null zurückgibt.

Also, wenn Ihre ExpectedConditions.elementToBeClickable mit einem Element zu finden, das wird gibt Ihnen immer das klickbaren Element, so dass keine Notwendigkeit für null Zustand zu überprüfen, sollten Sie wie unten versuchen: -

WebDriverWait wait = new WebDriverWait(Scenario1Test.driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//div[@id='brandSlider']/div[1]/div/div/div/img)[50]"))); 
element.click(); 

Wie Sie Sprich element.click() übergibt beide auf link und label das heißt nicht Element ist nicht anklickbar, bedeutet es zurückgegebene Element clicked aber möglicherweise gibt es kein Ereignis führt auf Element durch Klick-Aktion.

Hinweis: - Ich schlage Sie immer zuerst versuchen, Elemente zu finden, indem id, name, className und anderen Locator. Wenn Sie Schwierigkeiten haben, zu finden, dann verwenden Sie cssSelector und geben Sie immer die letzte Priorität an xpath Locator, weil es langsamer ist als andere Locator, um ein Element zu finden.

Hoffe, es hilft Ihnen .. :)

+0

Also sollte ich Hörer verwenden? um jedes Ereignis auf dem Etikett zu überprüfen –

+0

@SandeepKrishnappa Keine Notwendigkeit, Sie sollten versuchen, klicken Sie zuerst auf Browser-Konsole am Etikett mit Javascript .. und überprüfen, ob es ein Klick-Ereignis oder nicht empfängt ... wenn empfängt dann definitiv wird es durch Selen klicken .. –

0

aus dem Quellcode in der Lage, Ihnen das zu sehen, ExpectedConditions.elementToBeClickable(), wird es das Element sichtbar und aktiviert beurteilen, so können Sie isEnabled() zusammen mit isDisplayed() verwenden. Folgendes ist der Quellcode.

public static ExpectedCondition<WebElement> elementToBeClickable(final WebElement element) { 
 
\t \t return new ExpectedCondition() { 
 
\t \t \t public WebElement apply(WebDriver driver) { 
 
\t \t \t \t WebElement visibleElement = (WebElement) ExpectedConditions.visibilityOf(element).apply(driver); 
 

 
\t \t \t \t try { 
 
\t \t \t \t \t return visibleElement != null && visibleElement.isEnabled() ? visibleElement : null; 
 
\t \t \t \t } catch (StaleElementReferenceException arg3) { 
 
\t \t \t \t \t return null; 
 
\t \t \t \t } 
 
\t \t \t } 
 

 
\t \t \t public String toString() { 
 
\t \t \t \t return "element to be clickable: " + element; 
 
\t \t \t } 
 
\t \t }; 
 
\t }

2

Es gibt Fälle, in denen element.isDisplayed() && element.isEnabled()true zurückkehren wird, aber immer noch Element wird nicht anklickbar sein, weil es von einem anderen Element versteckt/überlappt ist. In einem solchen Fall ist Exception gefangen:

org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (781, 704). Other element would receive the click: ... USE>>>>>>>WebElement element=driver.findElement(By.xpath""); JavascriptExecutor ex=(JavascriptExecutor)driver; ex.executeScript("arguments[0].click()", element);

Es funktioniert.

Verwandte Themen