Selenium xpath没有这样的元素异常,即使它在firepath中工作

She*_*man 1 selenium xpath selenium-firefoxdriver selenium-webdriver

这是我使用Firebug检查元素时的样子

在此输入图像描述

当我在xpath中尝试相同的语法时,它选择结果页面2.我在selenium IDE中尝试了相同的方法并单击了find,它在执行代码时选择结果页面2.我正在接受No Such Element异常

Xpath语法: //a[contains(@href,'/jobs?q=qa+engineer&l=Renton%2C+WA&start=10')]/span[contains(@class,'pn')][text()='2']

public void jobSearch(){
        WebDriver driver= new FirefoxDriver();
        driver.get("https://www.indeed.com");
        driver.findElement(By.id("what")).sendKeys("QA Engineer");
        driver.findElement(By.id("where")).clear();
        driver.findElement(By.id("where")).sendKeys("Seattle,WA");
        driver.findElement(By.id("fj")).click();
        driver.manage().timeouts().implicitlyWait(25, TimeUnit.SECONDS);

        driver.findElement(By.xpath("//a[contains(@href,'/jobs?q=qa+engineer&l=Renton%2C+WA&start=10')]/span[contains(@class,'pn')][text()='2']")).click();
Run Code Online (Sandbox Code Playgroud)

感谢您的宝贵时间和宝贵的建议.

Sag*_*007 5

实际上有3个错误:

  1. 最大的错误,脚本无法找到下一页的可见选项.在给定的截图中,运行给定代码的结果.这就是脚本无法找到元素的原因.

Selenium Webdriver脚本仅适用于Visible Area

在此输入图像描述

方案:

添加步骤以向下滚动 网页

JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("window.scrollBy(0,1000)", "");
Run Code Online (Sandbox Code Playgroud)
  1. Xpath不是一般化的.它用于获取在2num页面放置的URL .因此改变如下:

    //div[@class='pagination']//span[text()='2']

  2. 有一些中断,如弹出,基于地区的网址.所以编写代码就像给定消除未来错误一样:

    public void jobSearch()   {
    
    
        try{
            WebDriver driver= new FirefoxDriver();
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            driver.get("https://www.indeed.com");
            try
            {
                //Here region based URL gets open so remove it if it is directly open www.indeed.com
                driver.findElement(By.linkText("www.indeed.com")).click();
            }
            catch (Exception e)
            {
    
            }
            driver.findElement(By.id("what")).sendKeys("QA Engineer");
            driver.findElement(By.id("where")).clear();
            driver.findElement(By.id("where")).sendKeys("Seattle,WA");
            driver.findElement(By.id("fj")).click();
            try
            {
                // After this one pop up gets open so close it
                driver.findElement(By.xpath("//button[@id='prime-popover-close-button']/span")).click();
            }
            catch (Exception e)
            {
    
            }
            //pageDown(driver.findElement(By.id("searchCount")), 2);
            JavascriptExecutor jse = (JavascriptExecutor) driver;
            jse.executeScript("window.scrollBy(0,1000)", "");
            //driver.findElement(By.xpath("//a[contains(@href,'/jobs?q=qa+engineer&l=Renton%2C+WA&start=10')]/span[contains(@class,'pn')][text()='2']")).click();
            driver.findElement(By.xpath("//div[@class='pagination']//span[text()='2']")).click();
            // Now continue you code here
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }   }
    
    Run Code Online (Sandbox Code Playgroud)

注意:请阅读GeckoDriver for Firefox和Chromedriver for Chrome浏览器使用Selenium 3.0+版本