Selenium:不明白如何为IMDB顶级电影编写正确的xpath

时间:2017-07-20 09:46:13

标签: java selenium xpath

我正在尝试点击“电影,电视和放映时间”下的IMDB最受好评的电影,但我不明白如何为它编写正确和精确的xpath。我无法点击评分最高的电影部分。

以下是代码:

driver.get("http://www.imdb.com");

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(By.id("navTitleMenu"))).build().perform();

driver.findElement(By.xpath("//li[@id='navTitleMenu']/div/div[2]/ul[1]/li[6]/a")).click();

帮帮我。谢谢。

3 个答案:

答案 0 :(得分:1)

你自己创建xpath我建议使用chrome创建xpath可能问题是你的xpath不正确试试这个:

//*[@id="navMenu1"]/div[2]/ul[1]/li[6]/a

或者如果没有,也许你应该等一下才能完成页面加载尝试

try {
        // thread to sleep for 5 seconds
        Thread.sleep(5000);
     } catch (Exception e) {
        System.out.println(e);
     }

然后

driver
.findElement(By.xpath("//*@id="navMenu1"]/div[2]/ul[1]/li[6]/a")).click();

答案 1 :(得分:1)

这就是我的情况:

    driver.get("http://www.imdb.com");
    new WebDriverWait(driver, 5000)
            .until(ExpectedConditions.visibilityOfElementLocated(By.id("navTitleMenu")));
    new Actions(driver)
            .clickAndHold(driver.findElement(By.id("navTitleMenu")))
            .moveToElement(driver.findElement(By.linkText("Top Rated Movies")))
            .click()
            .build().perform();

问题在于,当您转到navTitleMenu时 - 您应该继续执行您的操作,因为重点会从下拉列表中丢失(因此会关闭)

答案 2 :(得分:1)

首先, 忘记隐式等待,因为IMDB是一个稳定的站点所以不需要它

执行鼠标悬停后添加显式等待。它一定会对你有用。

尝试下面提到的确切代码,使用我的浏览器正常工作。

请根据目录中的位置更改gecko驱动程序路径

     package com.imdb.top;

     import org.openqa.selenium.By;
     import org.openqa.selenium.WebDriver;
     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;



     public class Imdb
     {
     public static void main(String...  args)
     {
     System.setProperty("webdriver.gecko.driver",
    "C:\\Users\\thinksysuser\\Downloads\
    \geckodriver-v0.18.0-win64\\geckodriver.exe");

     WebDriver driver = new FirefoxDriver();

     driver.get("http://www.imdb.com");



     Actions action = new Actions(driver);




     action.moveToElement(driver.findElement(By.id("navTitleMenu")))
                 .build().perform();

     WebDriverWait wait = new WebDriverWait(driver, 60, 50);

     wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*
     [@id='navMenu1']/div[2]/ul[1]/li[6]/a"))).click();

     driver.findElement(By.xpath(".//*
     [@id='navMenu1']/div[2]/ul[1]/li[6]/a")).click();
    }
 }