[英]Scrolling to a WebElement and clicking on it
我是自动化的新手,并且正在flipkart网站上练习。 在页面上:
...当我尝试通过滚动查看不在页面视图中的元素时,出现异常: Element is not clickable
下面是代码:
WebElement mobile = driver.findElement(By.xpath ("//a[@title='Apple iPhone 6S (Silver, 128 GB) ']"));
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].scrollIntoView();", mobile);
mobile.click();
我相信由于flipkart中可用的标题而发生了此问题:即使窗口正在滚动到该特定元素,标题也覆盖了该元素,因此无法单击它。
谁能解决这个问题?
你可以这样尝试
如果您想单击不在页面范围内的元素(无滚动),请尝试以下方法
public static void main(String[] args) throws InterruptedException { WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get( "http://www.flipkart.com/mobiles/pr?sid=tyy,4io&otracker=clp_mobiles_CategoryLinksModule_0-2_catergorylinks_11_ViewAll"); driver.manage().window().maximize(); // Take everything on the page in list first . List<WebElement> completecalContent = driver.findElements(By.xpath("//*[@class='fk-display-block']")); System.out.println(completecalContent.size()); // printing all elements for (int i = 0; i < completecalContent.size(); i++) { System.out.println("Print complete Content : " + completecalContent.get(i).getText()); if (completecalContent.get(i).getText().equals("Apple iPhone 5S (Space Grey, 16 GB)")) { // move to a specific element ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", completecalContent.get(completecalContent.size() - 1)); // move slightly up as blue header comes in the picture ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,-100)"); // then click on the element completecalContent.get(i).click(); } } }
您要滚动的情况,在这种情况下,请使用这些行更新上面的代码。
答:如果要滚动到页面底部,则
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
B.如果您想滚动到特定元素,请尝试此操作
WebElement element = driver.findElement(By.xpath("xpath to element"));
((JavascriptExecutor) driver).executeScript(
"arguments[0].scrollIntoView();", element);
C.如果要基于坐标滚动,请尝试此操作
((JavascriptExecutor) driver).executeScript("window.scrollBy(0,500)");
除了向上滚动到Web元素外,您还可以尝试向下滚动到类似页面的页面
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(250, 0)"); //x value '250' can be altered
否则,您可以尝试滚动到足以胜过所需元素的元素。 这意味着在您尝试的代码中,没有采用必需的web元素,而是仅滚动到所需元素上方的web元素,以便标头不覆盖必需元素。
谢谢,穆拉利
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.