2016-08-19 5 views
0

Szenario - Gültige Anmeldung bei www.homeshop18.com und dann aus dem Digitalmenü wählen Sie "Samsung". Die Ergebnisse werden angezeigt und ich muss jetzt eine andere Marke auswählen - Micromax aus dem Bereich Marke (auf der linken Seite der Seite angezeigt) , die Scrollen und Auswählen von Micromax erfordert.Selenium XPath wird während der Laufzeit geändert

Ausgabe:

Obwohl die XPath von Micromax ist richtig, welche // ist * [@ id = 'filter_1Option_12'] // div [@ class = 'ez-Checkbox'], aber ich während der Laufzeit zu sehen von Das Skript - eine andere Marke wird anstelle von Micromax ausgewählt. Bitte beraten.

// Klasse für gültige Anmeldung zu www.homeshop18.com

public class HomeShop_Login_Test 
{ 
    @FindBy(xpath="//a[@id='signInHeaderLink']") WebElement SignIn_Link; 
    @FindBy(xpath=".//input[@id='emailId']") WebElement Email; 
    @FindBy(xpath=".//input[@id='existing_user_radio']") WebElement Existing_User_Radio; 
    @FindBy(xpath=".//input[@id='new_user_radio']") WebElement New_User_Radio; 
    @FindBy(xpath=".//input[@id='password']") WebElement Password; 
    @FindBy(xpath=".//a[@id='signin']") WebElement SignIn_Button; 
    @FindBy(xpath="//a[@title='Close']") WebElement Close_Home; 


    public void Login_Valid() 
    { 
     WebDriverWait wait = new WebDriverWait(driver, 30); 

     WebElement SignIn_Link = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//a[@id='signInHeaderLink']"))); 

     JavascriptExecutor js = (JavascriptExecutor)driver; 
     js.executeScript("arguments[0].click()", SignIn_Link); 

     Email.sendKeys("[email protected]"); 
     boolean selected; 

     selected = New_User_Radio.isSelected(); 

     if(selected) 
     { 
      Existing_User_Radio.click(); 
     } 

     Password.sendKeys("xxx"); 
     SignIn_Button.click(); 


    } 

//Class to choose Samsung from Digital menu 

public class Browse_Samsung_Mobile 
{ 

    @FindBy(xpath="//*[@id='CategoryMenu1']//a[text()='Digital']") WebElement Digital_Menu; 
    @FindBy(xpath="//*[@id='CategoryMenu1']//a[@title='Samsung']") WebElement Samsung_SubMenu; 
    @FindBy(xpath="//*[@id='filter_1Option_19']//span[@class='selected_filter_img']") WebElement Micromax; 

    public void Browse_Samsung() 
    { 
     WebDriverWait wait = new WebDriverWait(driver, 30); 
     Actions act = new Actions(driver); 
     act.moveToElement(Digital_Menu).perform(); 
     act.click(wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='CategoryMenu1']//a[@title='Samsung']")))).build().perform(); 

     //WebElement Micromax = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='filter_1Option_12']//span[@class='selected_filter_img']"))); 

     JavascriptExecutor js = (JavascriptExecutor)driver; 
     js.executeScript("arguments[0].click()", Micromax); 

    } 
} 

//class to call above two classes 

public class Validate_Browse_Samsung_Mobile 
{ 

    WebDriver driver; 

    @Test 
    public void Validate_Browse() 
    { 
     driver = BrowserFactory.getBrowser("Firefox"); 
     driver.get(DataProviderFactory.getConfig().getURL()); 
     HomeShop_Login_Test login = PageFactory.initElements(driver, HomeShop_Login_Test.class); 
     login.Login_Valid(); 
     Browse_Samsung_Mobile browse = PageFactory.initElements(driver, Browse_Samsung_Mobile.class); 
     browse.Browse_Samsung(); 

    } 

} 

Antwort

1

Sie sollten mit ihrem Namen versuchen title mit Attribut wie folgt: -

WebElement micromax = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("a[title ~= "Micromax"] input"))); 
+0

Danke, es hat funktioniert! Obwohl mein Skript jetzt korrekt auf "micromax" klicken kann, kann ich den Klick nicht sehen. Gibt es einen Weg, kann ich mein Skript scrollen, das auch von mir angesehen werden kann? Derzeit verwende ich dieses Skript, aber das lässt den Klick nicht sehen. JavascriptExecutor js = (JavascriptExecutor) -Treiber; js.executeScript ("Argumente [0] .click()", Micromax); – Bimlesh

+0

Ja, Sie können zuerst scrollen, um anzuzeigen, klicken Sie auf '((JavascriptExexutor) -Treiber) .exexuteScript (" arguments [0] .scrollIntoView() ", micromax); micromax.click(); '... –

+0

Versucht, aber kein Glück. Bitte überprüfen. WebElement Micromax = wait.until (ExpectedConditions.presenceOfElementLocated (Von.xpath ("// * [@ id = 'filter_1Option_21'] // a [@ title = 'GSM-Mobiltelefone - Micromax']"))); \t \t \t \t JavascriptExecutor js = (JavascriptExecutor) -Treiber; \t \t js.executeScript ("Argumente [0] .scrollIntoView", Micromax); \t \t Micromax.click(); Fehler; org.openqa.selenium.ElementNotVisibleException: Element ist derzeit nicht sichtbar und kann daher nicht mit interagiert werden Befehlsdauer oder Zeitüberschreitung: 20,15 Sekunden – Bimlesh

0

sollten Sie folgende XPath verwenden richtige Kästchen zu wählen:

//a[@title="GSM Mobile Phones - Micromax"]/div/input 
+0

Danke, es hat funktioniert! Obwohl mein Skript jetzt korrekt auf "micromax" klicken kann, kann ich den Klick nicht sehen. Gibt es einen Weg, kann ich mein Skript scrollen, das auch von mir angesehen werden kann? Derzeit verwende ich dieses Skript, aber das lässt den Klick nicht sehen. JavascriptExecutor js = (JavascriptExecutor) -Treiber; js.executeScript ("Argumente [0] .click()", Micromax); – Bimlesh

Verwandte Themen