Selenium在小浏览器窗口中未检测到子菜单对象

时间:2016-05-10 06:51:09

标签: selenium selenium-webdriver

我正在尝试自动化测试具有响应/自适应设计的Web应用程序。

当用户使用全屏浏览器时,将根据屏幕显示尺寸显示不同的显示。

我使用全屏浏览器完全自动化了应用程序测试,但是当我尝试使用移动浏览器进行测试时,导航菜单的显示方式不同。在较小的窗口中,必须单击导航菜单将其展开,然后才能选择子菜单对象。我试图同时使用模拟器,物理设备和正常窗口,但都没有运气。

我可以毫无问题地扩展主菜单,但是,无论我尝试什么,Selenium似乎无法检测到子菜单对象。我尝试过做一个没有结果的动作构建器。我继续得到:

org.openqa.selenium.NoSuchElementException: Unable to locate element:
{"method":"partial link text","selector":"spotlight"}

有关我遇到困难的类似菜单的示例,请访问cleanandclear.com并使窗口尺寸小于全屏。

我希望工作的代码是:

        driver.findElement(By.id("touch-menu")).click();
        driver.findElement(By.linkText("Spotlight")).click();

2 个答案:

答案 0 :(得分:0)

我有同样的问题,在较小的屏幕我的下拉列表的高度大于浏览器窗口高度所以selenium webdriver无法找到元素。因此,我将html最小化为两次/三次,适合浏览器。

要最小化html,您可以使用以下代码:

WebElement html = seleniumHelper.getDriver().findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));

这解决了我的问题。

答案 1 :(得分:0)

尝试以下代码:

Thread.sleep(3000);
JavascriptExecutor js = (JavascriptExecutor)driver;
WebElement elem = driver.findElement(By.linkText("Spotlight"));//u can use xpath or cssselector or id here.

//this line will scroll down to make element visible
js.executeScript("window.scrollTo(" + elem.getLocation().x + "," +(elem.getLocation().y- 100) + ");");

//don't use this kind of wait, use explicit wait
Thread.sleep(1000);

//use this explicit wait.
WebDriverWait wait = new WebDriverWait(driver, 60); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("ur selector of that animated element")));//u can use by  id or xpath here also. 

elem.click();

//u can also use this function to make the element visible
js.executeScript("arguments[0].scrollIntoView(true);", elem);
elem.click();