Как отслеживать веб-страницу и знать, когда новый элемент HTML появляется с помощью Selenium? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть веб-страница, на которой иногда новые элементы добавляются динамически, например:

<span class="chat_message">| New Login</span>

Как мне записать, когда вышеуказанный код добавлен на мою страницу?

Мои испытания кода:

WebDriver driver = new ChromeDriver () ;
 driver.get("http://www.example.com") ;
// code to monitor the new span

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

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

import java.awt.AWTException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;

public class Testing {
	public static WebDriver driver;

	@Test
	public void test() throws InterruptedException, AWTException {
		WebDriver driver = new ChromeDriver();
		driver.get("http://www.example.com");
		Boolean isPresent = driver.findElements(By.xpath("//span[@class='chat_message']")).size() > 0;
		try {
			if (isPresent == true) {
				System.out.println("New Login is added to my page");
			} else {
				System.out.println("New Login is not added to my page");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Это вернет true, если хотя бы один элемент найден, и false, если он не существует.

Пожалуйста, примите ответ, если он соответствует вашим ожиданиям исделать upvote. Спасибо заранее.

0 голосов
/ 17 февраля 2019

Когда вы упоминаете, что вам нужно захватить элемент, который использует , сводится к WebDriverWait с Ожидаемые условия как visibilityOfElementLocated(By locator), поэтому вы можете извлечь любой из атрибутов элемента:

  • innerHTML
  • class attribute
  • outerHTML

В этих случаях наилучшим вариантом будет создание функции следующим образом:

public void getElementAttribute()
{
    try {
      System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='chat_message']"))).getAttribute("innerHTML"));
    }
    catch(Exception TimeoutException) {
      System.out.println("Element no found");
    }
}

Теперь эту функцию можно вызывать из любого местав вашей программе, чтобы проверить видимость элемента следующим образом:

getElementAttribute();

Примечание:

  • Поскольку элемент является динамическим элементом, вам необходимоиндуцировать WebDriverWait .
  • Поскольку вам нужно захватить элемент visibilityOfElementLocated подходит просто идеально.
  • Как это бывает иногда васнеобходимо обернуть строку кода в блоке try-catch {} и в случае изящной обработки исключения TimeoutException и продолжайте выполнять следующие шаги.
0 голосов
/ 17 февраля 2019

Если вы знаете локатор этого элемента - используйте цикл while, который содержит findElement() и ловит NoSuchElementException.Если элемент отсутствует, вы поймаете исключение, сделаете паузу на некоторое время (хотя sleep) и начнете новый цикл цикла.Если исключение не выброшено, элемент присутствует;измените свою переменную while на управляющую переменную на true и продолжайте.

Я бы посоветовал иметь счетчик, сколько раз выполнялся цикл, и, если он достигает определенного порога, - выйти из него сошибка / исключение - поэтому вы не застряли в бесконечном цикле.

Поздравляем - вы только что реализовали WebDriverWait с presenceOfElementLocated() ExpectedConditions.Вы можете пойти с ним (версия с ванильным селеном) или придерживаться собственного решения, которое даст вам более детальное управление и дерево решений - но потребует больше кодирования.


Если вы этого не сделаетеиметь определенный элемент, но просто хочу видеть, когда сама страница изменяется, алгоритм тот же, но: перед началом цикла, получить исходный код страницы.В его теле, получите это снова;если они разные, это ваше условие прорыва.
Хотя на этот подход будут влиять малейшие изменения на странице.

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