Как узнать время загрузки и выгрузки Ping из тестов браузера? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь автоматически speedtests с различными браузерами автоматически, и основная часть теста находится внутри цикла.Иногда проблема заключается в одном элементе, который был выбран ранее, и скрипт работал правильно на одном из следующих шагов, точно в том же цикле и на той же странице, но с другим номером, без каких-либо изменений в xpath.Селен не может выбрать его снова.Поэтому я не могу повторить свой тест столько, сколько хочу.

Большую часть времени у меня возникает эта проблема с Edge, и я думаю, что одной из причин может быть xpath для элементов, которые я нашел с помощью Chrome или Firefox.(Я не могу найти xpath в Edge, я много об этом искал).

Я также поставил другой путь xpath, который я использую.На самом деле я хочу получить числовые или строковые значения ping, download, местоположение загрузки и сервер.

Пожалуйста, дайте мне знать, как я могу решить эту проблему, я пробовал другое время сна и два разных xpath.скрипт всегда выдает ошибку, когда я пытаюсь выбрать элемент с помощью class_name или css_selector.

firefox: "/html/body/div[3]/div[2]/div/div/div/div[3]/div[1]/div[3]/div/div[3]/div/div[1]/div[2]/div[1]/div/div[2]/span"

хром: "//[@id='container']/div[2]/div/div/div/div[3]/div[1]/div[3]/div/div[3]/div/div[1]/div[2]/div[1]/div/div[2]/span"

хром:

"//div[@class='result-item result-item-ping updated']/div[2]/span"

Другой вопрос, как можноЯ жду, пока страница полностью загрузится.этот метод WebDriverWait(driver,some seconds) не работает для меня, и я должен использовать time.sleep()

Ошибка: selenium.common.exceptions.NoSuchElementException: Сообщение: Нет такого элемента

element = driver.find_element_by_xpath("/html/body/div[3]/div[2]/div/div/div/div[3]/div[1]/div[3]/div/div[3]/div/div[1]/div[2]/div[1]/div/div[2]/span")

Ответы [ 5 ]

2 голосов
/ 26 марта 2019

Для автоматизации тестов скорости вы можете использовать следующее решение:

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    
    driver = webdriver.Edge(executable_path=r'C:\WebDrivers\MicrosoftWebDriver.exe')
    driver.get("https://www.speedtest.net/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.js-start-test.test-mode-multi"))).click()
    WebDriverWait(driver, 45).until(EC.url_contains("result"))
    print("Ping :"+driver.find_element_by_css_selector("div[title='Reaction Time'] div.result-data.u-align-left>span").get_attribute("innerHTML"))
    print("Download: "+driver.find_element_by_css_selector("div[title='Receiving Time'] div.result-data.u-align-left>span").get_attribute("innerHTML"))
    print("Upload :"+driver.find_element_by_css_selector("div[title='Sending Time'] div.result-data.u-align-left>span").get_attribute("innerHTML"))
    #driver.quit()
    
  • Выход на консоль:

    Ping :35
    Download: 21.53
    Upload :3.46
    
  • Снимок браузера:

Edge_again

1 голос
/ 26 марта 2019

Попробуйте с помощью: element = driver.find_element_by_xpath("/html/body/div[3]/div[2]/div/div/div/div[3]/div[1]/div[3]/div/div[3]/div/div[1]/div[2]/div[1]/div/div[2]/")

Возможно, вам также нужно отловить исключение для: NoSuchElementException случаев.

1 голос
/ 26 марта 2019

Используйте следующие локаторы CSS для определения значений:

Загрузить: *.result-data-large.number.result-data-value.download-speed*

Загрузить: *.result-data-large.number.result-data-value.upload-speed*

Ping: *.result-data-large.number.result-data-value.ping-speed*

Используя getText(), вы можете получить их значения.Подождите, пока элемент на странице будет видимым, чтобы убедиться, что страница успешно загружена.

0 голосов
/ 29 марта 2019
    WebDriverWait driverWait = new WebDriverWait(driver, 30000);
    driver.get("https://www.speedtest.net/");
    WebElement goLink = driver.findElement(By.cssSelector(".js-start-test.test-mode-multi"));
    driverWait.until(ExpectedConditions.elementToBeClickable(goLink));
    goLink.click();

    By download = By.cssSelector(".result-data-large.number.result-data-value.download-speed");
    By upload = By.cssSelector(".result-data-large.number.result-data-value.upload-speed");
    By ping = By.cssSelector(".result-data-large.number.result-data-value.ping-speed");

    driverWait.until(ExpectedConditions.urlMatches("https://www.speedtest.net/result/[0-9]"));
    String downloadSpeed = driver.findElement(download).getText();
    String uploadSpeed = driver.findElement(upload).getText();
    String pingValue = driver.findElement(ping).getText();
    System.out.println("Download: "+downloadSpeed + "\nUpload: "+ uploadSpeed + "\n Ping: "+pingValue);

выход Загрузить: 78.82 Загрузить: 45.93 Пинг: 23

enter image description here

0 голосов
/ 26 марта 2019

Я протестировал эти CSS-селекторы, и они работают как в Chrome, так и в Edge.

span.ping-speed                         # ping
span.download-speed                     # download
span.upload-speed                       # upload
div.server-current > div.result-label   # server

Если вы хотите узнать, когда страница закончит загрузку, вы можете подождать, пока URL не изменится с https://www.speedtest.net до https://www.speedtest.net/results/<some number>.Я бы просто использовал WebDriverWait и url_contains("results"), например,

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
WebDriverWait(driver, 10).until(EC.url_contains("results"))

В этом вопросе есть и другие подходы .

...