Невозможно найти xpath звезды, используя селен & java - PullRequest
1 голос
/ 09 февраля 2020

Заранее спасибо!

url - 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();

    }
}

Ответы [ 4 ]

1 голос
/ 09 февраля 2020

Чтобы выбрать 5 th звезду в https://www.tripadvisor.in/, вы должны вызвать WebDriverWait для visibilityOfElementLocated(), и вы можете используйте одну из следующих стратегий локатора :

bubble_rating_widget

1 голос
/ 09 февраля 2020

Попробуйте использовать Java скрипт executor

JavascriptExecutor executor = (JavascriptExecutor) драйвер; executor.executeScript ("document.getElementById ('bubble_rating'). ui_bubble_rating fl bubble_05 bubble_50");

это будет работать, пожалуйста, дайте мне знать

0 голосов
/ 09 февраля 2020

Я думаю, что hover не будет работать, так как это единственный элемент для всей рейтинговой панели. так, что я заметил, это изменит 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);

, это сделает работу.

0 голосов
/ 09 февраля 2020

Пожалуйста, попробуйте этот кусок кода. Дайте мне знать, если вам нужна помощь.

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;
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...