Обработка рейтинговых виджетов - PullRequest
0 голосов
/ 10 февраля 2020

Попытка дать пять звездочек для всех трех виджетов рейтинга пузырей в [tripadvisor], как показано ниже на скриншоте со следующим кодом, но в chrome щелкает только первый виджет рейтинга. И в то время как в Firefox он генерирует исключение MoveTargetOutOfBoundsException.

new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#qid12_bubbles"))), 50, 0).click().build().perform();
Thread.sleep(10000);
new Actions(driver).moveToElement(new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#qid13_bubbles"))), 50, 0).click().build().perform();
Thread.sleep(10000);
new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#qid14_bubbles"))), 50, 0).click().build().perform();
  • Снимок браузера

Browser Snapshot

1 Ответ

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

Идентификатор, который вы используете, является динамическим c. Попробуйте использовать следующее xpath.

new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[1]"))), 50, 0).click().build().perform();
new Actions(driver).moveToElement(new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[2]"))), 50, 0).click().build().perform();
new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[3]"))), 50, 0).click().build().perform();

Снимок браузера.

enter image description here


ОБНОВЛЕНИЕ :

Для браузера firefox вам нужно scroll, чтобы получить фокус element, а затем выполнить операцию.

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[1]"))));
 new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[1]"))), 50, 0).click().build().perform();
 ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[2]"))));
 new Actions(driver).moveToElement(new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[2]"))), 50, 0).click().build().perform();
 ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[3]"))));
 new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[text()='Hotel Ratings']/following::span[3]"))), 50, 0).click().build().perform();
...