【问题标题】:Unable to find the xpath of star using selenium & java无法使用 selenium 和 java 找到 star 的 xpath
【发布时间】:2022-04-21 08:21:14
【问题描述】:

提前谢谢你!

网址 - https://www.tripadvisor.in/UserReviewEdit-g641714-d1156207-Club_Mahindra_Madikeri_Coorg-Madikeri_Kodagu_Coorg_Karnataka.html

我需要将鼠标悬停在星星上并选择第 5 颗星星。

请找到我的代码:-

private static void setRating(String star) {
        //new Actions(driver).moveToElement(driver.findElement(By.xpath("//*[@id='qid10']/option[1]"))).perform();
        List<WebElement> rating = driver.findElements(By.xpath("//span[@class='ui_bubble_rating fl bubble_00']"));
        rating.size();

        List<WebElement> ele = driver.findElements(By.xpath("//div[@class='easyClear bigRatingParent']"));
        System.out.println(ele.size());
        for(WebElement ratings:ele) {
            System.out.println(ratings);
        }
        new Actions(driver).moveToElement(driver.findElement(By.xpath("//div[@class='question rating bigRating labelAndInput required  ']/child::label/following-sibling::div/child::span"))).perform();
        driver.findElement(By.xpath("//*[@id='qid10']/option[6]")).click();

    }
}

【问题讨论】:

标签: java selenium xpath


【解决方案1】:

尝试使用 Java 脚本执行器

JavascriptExecutor 执行器 = (JavascriptExecutor)驱动程序; executor.executeScript("document.getElementById('bubble_rating').ui_bubble_rating fl bubble_05 bubble_50");

这会起作用,请告诉我

【讨论】:

    【解决方案2】:

    要选择https://www.tripadvisor.in/ 中的5th 星,您必须为visibilityOfElementLocated() 诱导WebDriverWait,您可以使用以下Locator Strategies:

    • xpath:

      driver.get("https://www.tripadvisor.in/UserReviewEdit-g641714-d1156207-Club_Mahindra_Madikeri_Coorg-Madikeri_Kodagu_Coorg_Karnataka.html]");
      new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@id='bubble_rating']"))), 50, 0).click().build().perform();
      
    • cssSelector:

      driver.get("https://www.tripadvisor.in/UserReviewEdit-g641714-d1156207-Club_Mahindra_Madikeri_Coorg-Madikeri_Kodagu_Coorg_Karnataka.html]");
      new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span#bubble_rating"))), 50, 0).click().build().perform();
      
    • 浏览器快照:

    【讨论】:

      【解决方案3】:

      我认为悬停不会起作用,因为它是整个评分栏的单个元素。所以我观察到它会改变class 选定评级的值。我们可以通过更改class属性的value和JS来更改评级

      JavascriptExecutor js = (JavascriptExecutor) driver;
      js.executeScript("document.getElementById('bubble_rating').setAttribute('class', 'ui_bubble_rating fl bubble_50')");
      

      或

      WebElement element = driver.findElement(By.id("bubble_rating"));
      
          js.executeScript("arguments[0].setAttribute('class','ui_bubble_rating fl bubble_50')", element);
      

      它会完成这项工作。

      【讨论】:

        【解决方案4】:

        试试这个:

        import java.time.Duration;
        import java.util.List;
        import org.openqa.selenium.By;
        import org.openqa.selenium.Dimension;
        import org.openqa.selenium.WebDriver;
        import org.openqa.selenium.WebElement;
        import org.openqa.selenium.chrome.ChromeDriver;
        import org.openqa.selenium.interactions.Actions;
        
        public class TripAdvisor 
        {
            public static void main(String[] args) 
            {
                // TODO Auto-generated method stub
                
                System.setProperty("webdriver.chrome.driver","C:\\selenium\\Drivers\\chromedriver.exe");
                WebDriver driver = new ChromeDriver();
                String baseUrl = "https://www.tripadvisor.in/"
                                + "UserReviewEdit-g641714-d1156207-Club_Mahindra_Madikeri_Coorg-Madikeri_Kodagu_Coorg_Karnataka.html";
                driver.get(baseUrl);
                
                // Capture the webElement and its width
                WebElement target = driver.findElement(By.xpath("//img[@alt='Roll over, then click to rate']/.."));
                Dimension dimension = target.getSize();
                int  width= dimension.getWidth();
                
                // Initialize the list of 5 star rating with no elements
                List<WebElement> rating5star= driver.findElements(By.xpath("//span[@class='ui_bubble_rating fl bubble_50']"));
                
                
                // When using the W3C Action commands, offsets are from the center of element
                // This is in contradiction to the information provided in Selenium java docs
                // https://selenium.dev/selenium/docs/api/java/org/openqa/selenium/interactions/Actions.html#moveToElement-org.openqa.selenium.WebElement-int-int-
                // Hence the movement should be from -(width/2) to (width/2)
                
                Actions action = new Actions(driver);
                int x = (0 - width/2);
                while(rating5star.size()==0 & x<=(width/2))
                {
                    action.moveToElement(target, x, 0).click().pause(Duration.ofSeconds(1)).perform();
                    rating5star= driver.findElements(By.xpath("//span[@class='ui_bubble_rating fl bubble_50']"));
                    System.out.println(rating5star.size());
                    x=x+10;
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-27
          • 1970-01-01
          相关资源
          最近更新 更多