2016-08-19 3 views
0

Сценарий - Действительный вход на сайт www.homeshop18.com, а затем из цифрового меню выберите «Samsung». Результаты отображаются, и теперь мне нужно выбрать другой бренд - Micromax из раздела «Бренд» (отображается в левой части страницы) , для которого требуется прокрутка и выбор Micromax.Изменение Selenium xpath во время выполнения

Издание:

Хотя XPath из Micromax правильно что // * [@ ID = 'filter_1Option_12'] // DIV [@ класс = 'эз-флажок'], но я вижу, во время пробега сценарий - какой-то другой бренд выбирается вместо микромакса. Просьба сообщить.

// Класс для действительного входа в 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(); 

    } 

} 

ответ

1

Вы должны попробовать их имя с помощью title как указано ниже: -

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

Спасибо, это сработало! Хотя теперь мой скрипт способен правильно щелкнуть «micromax», но я не вижу клика. Есть ли способ, я могу сделать прокрутку моего скрипта, который тоже может быть просмотрен мной? В настоящее время я использую этот скрипт, но это не позволяет увидеть щелчок. Драйвер JavascriptExecutor js = (JavascriptExecutor); js.executeScript ("arguments [0] .click()", Micromax); – Bimlesh

+0

Да, вы можете прокрутить сначала, чтобы просмотреть щелчок как драйвер '((JavascriptExexutor)) .exexuteScript (« arguments [0] .scrollIntoView() », micromax); micromax.click(); '... –

+0

Пробовал, но не повезло. Пожалуйста, проверьте. WebElement Micromax = wait.until (ExpectedConditions.presenceOfElementLocated (By.xpath ("// * [@ id = 'filter_1Option_21'] // a [@ title = 'Мобильные телефоны GSM - Micromax']"))); \t \t \t \t Драйвер JavascriptExecutor js = (JavascriptExecutor); \t \t js.executeScript ("arguments [0] .scrollIntoView", Micromax); \t \t Micromax.click(); Ошибка; org.openqa.selenium.ElementNotVisibleException: Элемент в настоящее время не виден и поэтому не может взаимодействовать с Продолжительность или таймаут команды: 20.15 секунд – Bimlesh

0

Вы должны использовать следующие XPath выбрать правильную флажок:

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

Спасибо, это сработало! Хотя теперь мой скрипт способен правильно щелкнуть «micromax», но я не вижу клика. Есть ли способ, я могу сделать прокрутку моего скрипта, который тоже может быть просмотрен мной? В настоящее время я использую этот скрипт, но это не позволяет увидеть щелчок. Драйвер JavascriptExecutor js = (JavascriptExecutor); js.executeScript ("arguments [0] .click()", Micromax); – Bimlesh

Смежные вопросы