在Selenium中使用XPath表达式时出现异常“no such element”(无此类元素),即使它可以在FirePath中工作

q9rjltbz  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(236)

下面是使用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();
kyvafyod

kyvafyod1#

实际上有三个错误:
1.犯了***大***错误:脚本无法找到下一页的可见选项。
在给定的屏幕截图中,运行给定代码时的结果。这就是脚本无法找到元素的原因。
Selenium WebDriver脚本仅适用于 * 可见区域 *。

解决方法:
添加向下滚动网页的步骤:

JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("window.scrollBy(0, 1000)", "");
  1. XPath表达式不是通用的。它用于获取放置在2 num页面的任何URL。因此,更改如下所示:
    //div[@class='pagination']//span[text()='2']
    1.有一些中断,如弹出的、基于区域的URL。因此编写如下代码以消除将来的错误:
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 the 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();
    }
}

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

gr8qqesn

gr8qqesn2#

因为此时DOM中可能尚未加载该元素,而您在搜索该元素后使用了wait语句。
但是wait语句必须在操作和搜索元素之前添加。

j13ufse2

j13ufse23#

请尝试使用以下XPath表达式:

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

**注意:**2 -用于 * 第二页链接 *。根据需要的页码更改它。

相关问题