使用不同的定位器定位WebElement(NoSuchElementException)

时间:2019-12-30 11:47:54

标签: java eclipse selenium selenium-webdriver testng

我在使用不同的定位器定位WebElement时遇到问题。在下面的html标签中,我尝试使用不同的定位器(如linkText,xpath,classname)定位“写评论” WebElement,但仍然出现NoSuchElementException。

-> URL https://www.tripadvisor.in/-->搜索Club Mahindra->单击Club Mahindra->单击以撰写评论。

dput()

使用的定位器

  • By.xpath(“ // * [@ id =” component_12“] / div / div [2] / div / div [2] / div / div [1] / a”)
  • By.xpath(“ // a [@href ='/ UserReview-g641714-d1156207- Club_Mahindra_Madikeri_Coorg-Madikeri_Kodagu_Coorg_Karnataka.html']“)
  • By.className(“ ui_button primary”)
  • By.linkText(“撰写评论”)

我真的很困惑。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

您可以尝试

  //a[contains(text(),'Write a review')]

答案 1 :(得分:0)

我已经厌倦了分析和实施。以下是我的发现:

->应用程序等待时间更长,因为该页面上有许多动态负载适用。

->需要适当的等待

->检查是否所有页面都在同一选项卡中打开或单击每个链接是否重定向到新选项卡,如果是,则必须切换到该特定窗口。

->下面的代码对我来说像专家。

    driver.get("https://www.tripadvisor.in/");
    WebDriverWait wait = new WebDriverWait(driver, 120);
    WebElement ele1 =  
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[text()='Where to?']")));
    ele1.click();

    WebElement ele2= wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@placeholder='Where to?']")));
    ele2.sendKeys("club mahindra, india");

    WebElement ele3= wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(text(),'Search for ')]")));
    ele3.click();
    WebElement ele4= wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(text(),'Club Mahindra Madikeri, Coorg')]")));
    ele4.click();   //this click leads to a new tab 

    Set<String> winHandles = driver.getWindowHandles();  

    for(String str : winHandles) {
        driver.switchTo().window(str);
    }
    System.out.println(driver.getTitle());

    WebElement ele;
    int i=1;
    while(true) {
        try {
         ele = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[text()='Write a review']")));
         break;
        }catch(Exception e) {
            System.out.print(i++);
        }
    }
    System.out.println();
    Actions action = new Actions(driver);
    action.moveToElement(ele);
    ele.click();
    System.out.println("Clicked on the 'Write a review button'");