2016-06-17 2 views
1

Я новичок в веб-селене Селен. Я пытаюсь автоматизировать действия в this сайтеДвижение мыши на веб-странице с использованием Selenium Webdriver

В веб-странице, я хочу, чтобы переместить курсор в «Магазин по категории» -> «Мобильные телефоны & таблетки» -> нажмите на ссылку «Android Mobiles». Но не удалось увидеть ссылку на телефон Android.

Не могли бы вы направить меня сюда, спасибо.

Ниже приведен код,

public static void main(String args[]){ 
    WebElement oEle1,oEle2; 
    System.setProperty("webdriver.ie.driver","C:\\Users\\1003061\\Documents\\Automation testing\\selenium softwares\\IEDriverServer_Win32_2.53.0\\IEDriverServer.exe"); 
    WebDriver driver=new InternetExplorerDriver(); 
    driver.manage().window().maximize(); 
    driver.get("http://www.amazon.in/"); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

    Actions oMouse=new Actions(driver); 
    oEle1=driver.findElement(By.xpath("//*[contains(text(),'Category')]")); 
    oMouse.moveToElement(oEle1).build().perform(); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    oEle2=driver.findElement(By.xpath("//*[@aria-label='Mobiles & Tablets']/span[contains(text(),'Mobiles & Tablets')]")); 
    oMouse.moveToElement(oEle2).build().perform(); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    driver.findElement(By.xpath("//a[contains(@href,'android_mobiles')]")).click(); 

} 
+0

Вы недопонимание, как 'driver.manage() времени ожидания() implicitlyWait (10, TimeUnit.SECONDS).. ' работает. implicitlyWait означает, что после того, как вы установите это свойство, селен будет ждать 10 секунд перед каждой отдельной командой, которую он выполняет. Вам нужно только установить это свойство один раз в своем тесте, а не после каждого шага. Однако рекомендуется не использовать это вообще. Вместо этого вы должны использовать WebDriverWait. – Mobrockers

+0

За исключением комментариев Mobrockers выше, чтобы удалить implicitWaits, я не вижу ничего плохого в вашем коде. Я запускал его на своей машине, используя FF, и он отлично работает. Вы пытались запустить его с другими браузерами? Это работает? – JeffC

ответ

1

Если на вашем месте я бы не беспокоить после ниспадающего структуры этого сайта. Я просто выполнил команду javascript, чтобы выбрать нужный вариант.

WebElement element = driver.findElement(By.xpath("//a[contains(@href,'android_mobiles')]")) 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", element); 
+0

Не делайте этого. Пользователь не может нажать ссылку, которая не отображается. Selenium был разработан, чтобы взаимодействовать только с видимыми элементами на странице, потому что это то, к чему пользователь имеет доступ. Если вы делаете такие вещи, используя JSE для доступа к скрытым элементам, то вы не автоматизируете пользовательский сценарий. – JeffC

+0

Учитывая, что он выполняет действия на интернет-магазине amazon, я сомневаюсь, что он тестирует сценарий пользователя и не заботится о его копировании точно. Он просто хочет попасть на страницу, и это самый простой способ сделать это. – RemcoW

0

Возможно расположение меню изменилось в последние несколько месяцев

Я пишу питон скрипт для перемещения курсора в меню «Все мобильные» пп

action = ActionChains(driver); 

Во-первых, Я использую идентификатор элемента, чтобы переместить курсор на «Магазин по категориям»

category = driver.find_element_by_id('nav-link-shopall') 

action.move_to_element(category); 
action.perform(); 

sleep(0.1) 

Затем, используя find_element_by_xpath я могу найти элемент диапазона с меткой "мобильные телефоны, компьютеры"

< пролет класс = "нав-hasPanel нав-пункт" данных нав-panelkey ​​= роль "PhonesAccessoriesPanel" = "навигация" ария-метка = "мобильные телефоны, компьютеры"> < пролет класс = "нав-текст"> Мобильные телефоны, компьютеры </SPAN> </SPAN>

mobile = driver.find_element_by_xpath("//*[span='Mobiles, Computers']") 


action.move_to_element(mobile); 
action.perform(); 

sleep(0.1) 

И наконец

< пролет класс = "нав-текст"> Все мобильные телефоны </SPAN>

allmobile = driver.find_element_by_xpath("//*[span='All Mobile Phones']") 


action.move_to_element(allmobile); 
action.perform(); 

sleep(0.1) 
allmobile.click(); 
Смежные вопросы