我无法滚动到指定的值。在以下链接
http://www.flipkart.com/mobiles/samsung~brand/pr?sid=tyy,4io&otracker=hp_nmenu_sub_electronics_0_Samsung
我需要点击排除缺货,因为我需要滚动网页并点击它。
通过自动化我无法实现这一目标
使用以下代码获取坐标
Point hoverItem =driver.findElement(By.xpath("//li[@title='Exclude Out of Stock']/a")).getLocation();
System.out.println("dsds"+hoverItem);
((JavascriptExecutor)driver).executeScript("return window.title;");
Thread.sleep(6000);
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+(hoverItem.getY())+");");
并使用以下代码向下滚动。
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(143,1459)", "");
然后我用链接点击这个。
driver.findElement(By.xpath("//li[@title='Exclude Out of Stock']/a")).click();
上面的代码无效。
如果我运行代码并手动滚动,则单击指定的值
如何克服这种情况。 代码
package Examples;
import java.util.concurrent.TimeUnit;
//import org.junit.BeforeClass;
import org.testng.annotations.BeforeClass;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class Flipkart {
public static WebDriver driver;
@BeforeClass
public void beforeClass()
{
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);
}
@Test
public void FlipkartTest() throws InterruptedException
{
driver.get("https://www.flipkart.com/");
driver.manage().window().maximize();
navback();
System.out.println("22 "+driver.findElement(By.xpath("/html/body/div/div/div[2]/div/div/ul/li/div/div[2]/div/ul/li[2]/a")).getText());
driver.findElement(By.xpath("/html/body/div/div/div[2]/div/div/ul/li/div/div[2]/div/ul/li[2]/a")).click();
driver.findElement(By.xpath("//li[@title='Exclude Out of Stock']/a")).click();
}
public void navback()
{
WebElement we = driver.findElement(By.xpath("//html/body/div/div/div[2]/div/div/ul/li/a/span"));
Actions action = new Actions(driver);
action.moveToElement(we).build().perform();
}
@AfterClass
public void tear()
{
// driver.quit();
}
}
答案 0 :(得分:0)
Selenium Webdriver会自动滚动以定位元素,因此只有findElement()
click()
才能正常工作,前提是用于定位元素的选择器是正确的。
该元素需要一些时间才能显示,所以我会使用implicit or explicit wait等待它。
new WebDriverWait(driver,30).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#availability input.facetoption"))).click();
答案 1 :(得分:0)