2017-01-15 5 views
0

Я пытаюсь навести курсор мыши на главное меню и выбрать подменю с помощью java selenium, я получил его, чтобы навести курсор на меню, но не могу выбрать подменю, если я попытаюсь найти по linktext я всегда получаю сообщение об ошибке «не существует», если я использую xpath, потому что сборка выполнена успешно, но не открывает новую страницу. Вот мой код для этого до сих порНаведите курсор на меню и выберите подменю в java Selenium

System.setProperty("webdriver.chrome.driver","C:/Driver/chromedriver.exe");  
    WebDriver webDriver = new ChromeDriver();  
    webDriver.manage().window().maximize(); 
    webDriver.navigate().to("https://www.skiutah.com"); 

    String NavTo = "DEALS"; 
    String pathx = "//*[@id=\"top_menu\"]/ul/li[4]/ul/li[1]/ul/li[2]/a" ; 
    WebElement element = webDriver.findElement(By.linkText(NavTo)); 
    WebElement el = webDriver.findElement(By.xpath(pathx)); 
    Actions action = new Actions(webDriver); 
    action.moveToElement(element).perform(); 
    action.moveToElement(el).click(); 

ответ

0

Я думаю, что путь вы зависания и нажав на подменю не кажется правильным.

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

WebElement menu = driver.findElement(By.your_locator); 
WebElement sub_menu = driver.findElement(By.your_locator); 
Actions action = new Actions(driver); 
action.moveToElement(menu).moveToElement(sub_menu).click().build().perform(); 

Explaination: -

Здесь используется build() метод компилировать весь перечень действий, в один шаг и готовы быть выполнены

1

В WebDriver мы дали возможность управлять событиями Mouse. Попробуйте этот кусок кода. Это должно служить цели.

driver.get("https://www.skiutah.com/"); 
WebElement deals = driver.findElement(By.xpath("//a[@title='Deals']")); 
Mouse mouse = ((HasInputDevices) driver).getMouse(); 
Locatable hoverItem = (Locatable) deals; 
mouse.mouseMove(hoverItem.getCoordinates()); 
WebElement beginner = driver.findElement(By.xpath("//a[text()='Beginner']")); 
new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOf(beginner)); 
Locatable clickItem = (Locatable) beginner; 
mouse.mouseDown(clickItem.getCoordinates()); 
mouse.mouseUp(clickItem.getCoordinates()); 
System.out.println(driver.getTitle()); 
1

Чтобы использовать мышь над действием, нам нужно использовать build.perform. Он называется цепочкой действий, которая обеспечивает совместное выполнение действий в конце. Или вы можете поменять место, как показано ниже, и оно должно работать для вас. Я пробовал выглядеть хорошо.

String NavTo = "DEALS"; 
String pathx = "//*[@id=\"top_menu\"]/ul/li[4]/ul/li[1]/ul/li[2]/a" ; 
WebElement element = webDriver.findElement(By.linkText(NavTo)); 
WebElement el = webDriver.findElement(By.xpath(pathx)); 
Actions action = new Actions(webDriver); 
action.moveToElement(el).click(); 
String NavTo = "DEALS"; 
String pathx = "//*[@id=\"top_menu\"]/ul/li[4]/ul/li[1]/ul/li[2]/a" ; 
WebElement element = webDriver.findElement(By.linkText(NavTo)); 
WebElement el = webDriver.findElement(By.xpath(pathx)); 
Actions action = new Actions(webDriver); 
action.moveToElement(el).click(); 
action.moveToElement(element).perform(); 
0
//locate the menu to hover over using its xpath 
WebElement menu = driver.findElement(By.linkText("Deals")); 
//Initiate mouse action using Actions class 
Actions builder = new Actions(driver); 
// move the mouse to the earlier identified menu option 
builder.moveToElement(menu).build().perform(); 
// wait for max of 5 seconds before proceeding. 
// until this submenu is found 
WebDriverWait wait = new WebDriverWait(driver, 5); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"top_menu\"]/ul/li[4]/ul/li[1]/ul/li[2]/a"))); 
//identify menu option from the resulting menu display and click 
WebElement menuOption = driver.findElement(By.xpath("//*[@id=\"top_menu\"]/ul/li[4]/ul/li[1]/ul/li[2]/a")); 
menuOption.click(); 
0
This works for me first time, but if repeated for other menu item then it cant find or something. 

WebElement menu = driver.findElement(By.your_locator); 
WebElement sub_menu = driver.findElement(By.your_locator); 
Actions action = new Actions(driver); 
action.moveToElement(menu).moveToElement(sub_menu).click().build().perform(); 
0

Первый MouseHover в главное меню, а затем нажмите любую из подменю.

WebDriverWait Wait = new WebDriverWait(driver,10); 
Wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//[@id='top_menu']/ul/li[4]/a")))); 
Actions mousehover = new Actions(driver); 
mousehover.moveToElement(driver.findElement(By.linkText("Deals"))).build().perform(); 
Wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.linkText("All Deals")))); 
driver.findElement(By.linkText("All Deals")).click(); 
0

Я пытаюсь «щелкнуть» подменю. Необходимо навести курсор мыши на главное меню, и для загрузки подменю требуется несколько секунд. то мне нужно найти подменю и щелкнуть его. Вот код, который я использовал

Actions ac = new Actions(dr); 
WebElement we = dr.findElement(By.xpath(".//*[@id='ddtopmenubar']/ul/li[1]/a")); 
ac.moveToElement(we).build().perform(); 
WebDriverWait wait = new WebDriverWait(dr, 5); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='dataingestionsubmenu']/li[2]/a"))); 
WebElement e= dr.findElement(By.xpath(".//*[@id='dataingestionsubmenu']/li[2]/a")); 
e.click(); 

, но это не похоже на работу вне.

получает исключение, как: org.openqa.selenium.WebDriverException: performActions Строить информация: версия: 'неизвестный', пересмотр: 'неизвестный', время: 'неизвестный'

, когда я сделать то же самое в отладке mode, то я могу щелкнуть подменю.

+0

Даже я пробовал этот код: WebElement menu = driver.findElement (By.your_locator); WebElement sub_menu = driver.findElement (By.your_locator); Действия action = new Действия (драйвер); action.moveToElement (menu) .moveToElement (sub_menu) .click(). Build(). Perform(); –