2016-08-09 135 views
0

enter image description here hey ich schreibe einen Testfall in Selen, der Test basiert auf einer Shopping-Website (http://www.beechtree.pk/) und was ich in meinem Test überprüfen möchte, ist, wenn die Größe für die Produktauswahl verfügbar ist oder nicht. Die Größen, die nicht verfügbar sind, werden auf der Website angezeigt, so dass ich weiß, dass sie nicht mehr anklickbar sind. Ich habe versucht, isEnabled und isDisplayed Bedingung zu verwenden, um zu überprüfen, ob es clickab; e ist, aber sie funktionieren nicht.wie überprüft man, ob eine Schaltfläche in Java anklickbar ist, selen webdriver.ps:check, wenn anklickbar nicht warten, bis es klickbar ist

ps: Ich möchte überprüfen, ob es anklickbar (Größe ist verfügbar), so dass, wenn es nicht ist, kann mein Programm eine andere Größe wählen, um mit der Prozedur fortzusetzen (es wählt derzeit zufällig), also will ich nicht warten, bis es klickbar wird.

+0

Bitte senden Sie Ihren Code als Text (formatiert als Code) anstelle eines Bildes. – JeffC

Antwort

0

Wie ich sehe, können Sie versuchen, das Klassenattribut zu erhalten und prüfen, ob es disabledSwatch enthält.

Wenn Sie nur auf die Größen zu überprüfen, die dann verfügbar sind, warum nicht einen CSS-Selektor wie verwenden:

span[class='swatch']

Sie diese Schaltelemente zur Suche verwenden können, und klicken Sie zufällig aus Sie.

Xpath Alternative:

//*[@class='swatch'] 

oder

//*[@class='swatch']/.. 
+0

Ich wähle die Größe nach dem Zufallsprinzip aus der Klasse swatch, mit cssSelector.i verstehe nicht Ihre Lösung obwohl –

+0

Sie müssen angeben, um die genaue Klasse entsprechen. – lauda

+0

Ich habe ein Bild von meinem code.i hinzugefügt werden versuchen, Änderungen nach dem, was Sie sagen, obwohl ich verstehe Sie immer noch nicht, wie ich css selector ... –

0

isEnabled und wirdangezeigt sollte für Sie arbeiten. Können Sie überprüfen, ob Sie das Element richtig auswählen? Können Sie den Text der Schaltfläche drucken. Dummy-Code:

public class Test{ 

    public static void main(String[] args) { 
        // TODO Auto-generated method stub 

    System.setProperty("webdriver.chrome.driver", "C:\\Selenuim\\chromedriver2.3.exe"); 
    WebDriver driver = new ChromeDriver(); 

    try{ 
    driver.get("http://register.rediff.com/register/register.php"); 

    Thread.sleep(2000); 
    WebElement e = driver.findElement(By.name("btnemail")); 

    boolean actualValue = e.isEnabled(); 

    if (actualValue) 
      System.out.println("Button is enabled"); 
    else 
      System.out.println("Button is disabled"); 

    Thread.sleep(2000); 

    } 
catch(Exception ex){ 
     System.out.println("Exception " + ex.getMessage()); 
       } 
       finally{ 

        driver.close(); 
        driver.quit(); 
       } 
     } 

} 
+0

ich hart codiert, um die deaktivierte/gred out Größe auf der Website und dann in meinem Testprogramm zu wählen , etwas ausgedruckt, wenn es aktiviert wurde, es hat es gedruckt, was bedeutet, dass mein Programm erkennt, dass es aktiviert ist, obwohl es ausgegraut ist und nicht auf der Website anklickbar ist. Gleiches passiert, als ich isDisplayed getestet habe ... –

+0

Okay. Können Sie Thread.sleep (10000) oder driver.manage() verwenden timeouts() implicitlyWait (10, TimeUnit.SECONDS); Folge Link http://toolsqa.com/selenium-webdriver/wait-commands/ –

+0

aber ich möchte nicht, dass mein Programm wartet oder schläft:/ Ich möchte, dass es weitergeht und wähle eine andere Größe, wenn es aktuell ist Nicht verfügbar :/ –

0

Um alle klickbare Elemente zu erhalten:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch:not(.disabledSwatch)")) 

Um alle nicht anklickbare Elemente zu erhalten:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch.disabledSwatch")) 

Um ein zufälliges Element zu erhalten und prüfen, ob es anklickbar ist durch Testen des Cursors:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch")); 
boolean disabled = elms.get(i).getCssValue("cursor") != "pointer"; 

Um ein zufälliges Element zu erhalten und prüfen, ob es die Klasse durch das Testen klickbare ist:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch")); 
boolean disabled = elms.get(i).getAttribute("class").contains("disabledSwatch"); 
0

Ich würde vorschlagen, dass anstelle der Prüfung Zufallsgrößen zu sehen, wenn sie verfügbar sind, würden Sie überprüfen alle die Größen zu sehen ob sie verfügbar sind oder nicht.

Von der Website ist die Größe in einem SPAN Element. Diese Größe ist nicht verfügbar, notieren Sie die disabledSwatch Klasse für das Element.

<span id="swatch11" class="swatch disabledSwatch" onclick="colorSelected('attribute133','11','','8')">8</span> 
            ^^^^^^^^^^^^^^ 

Diese Größe ist, die disabledSwatch Klasse nicht vorhanden ist.

<span id="swatch14" class="swatch" onclick="colorSelected('attribute133','14','','10')">10</span> 

Mithilfe dieser Informationen können wir alle Größen ziehen und entfernen, die nicht verfügbar sind. Dadurch erhalten wir zwei Listen, eine mit nur den verfügbaren Größen und eine andere mit den nicht verfügbaren Größen. Diese Elemente enthalten Text, der die Größe angibt.

Mit all diesen Informationen zieht der folgende Code alle Elemente, trennt sie in verfügbare vs nicht verfügbare Elemente und zieht dann die Größeninformationen aus jedem Element und speichert diese in zwei Listen, availableSizes und unavailableSizes. Von dort können Sie die Listen drucken oder überprüfen, ob bestimmte Größen verfügbar ist oder nicht, usw.

List<WebElement> unavailableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch.disabledSwatch")); 
List<WebElement> availableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch")); 
availableElements.removeAll(unavailableElements); 
List<String> unavailableSizes = new ArrayList<String>(); 
List<String> availableSizes = new ArrayList<String>(); 
for (WebElement e : unavailableElements) 
{ 
    unavailableSizes.add(e.getText()); 
} 
for (WebElement e : availableElements) 
{ 
    availableSizes.add(e.getText()); 
} 
0

Wäre das nicht so etwas wie diese Arbeit sind?

 List<WebElement> sizes = new ArrayList<WebElement>(); 
     for(WebElement size : sizes) { 
      if(size.isDisplayed() && size.isEnabled()) { 
       size.click(); 
       break; 
      } 
     }