Есть ли более быстрый способ заполнить формы ввода с помощью Selenium C # - PullRequest
0 голосов
/ 01 июля 2018

Я использую селеновый веб-драйвер в c # для автоматизации заполнения форм ввода и использования SendKeys (); метод, но это занимает очень много времени, чтобы заполнить формы ввода. Мне интересно, есть ли способ заполнить все формы ввода одновременно или есть более быстрый способ заполнить их по одной, чем SendKeys (); метод. По сути, я хочу заполнить формы как можно быстрее. Буду признателен за любую помощь.

Пример моего кода:

//name
chromeDriver.FindElementByXPath("//*[@id='order_billing_name']").SendKeys("John Doe");

//email
chromeDriver.FindElementByXPath("//*[@id='order_email']").SendKeys("Johndoe@gmail.com");

//telephone
chromeDriver.FindElementByXPath("//*[@id='order_tel']").SendKeys("123-456-7890");

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Полагаю, на вашем экране слишком много элементов. Это может замедлить алгоритм поиска.

Как насчет вас Сначала найдите форму полей, в которые вы хотите отправить ключи, а затем выполните поиск элементов внутри формы? Таким образом, вы отбрасываете все остальные элементы вне формы, поэтому производительность должна быть увеличена.

Примерно так:

    WebElement form = chromeDriver.FindElementById("my-form")

    //name
    form.FindElementByXPath("//*[@id='order_billing_name']").SendKeys("John Doe");

    //email
    form.FindElementByXPath("//*[@id='order_email']").SendKeys("Johndoe@gmail.com");

    //telephone
    form.FindElementByXPath("//*[@id='order_tel']").SendKeys("123-456-7890");
0 голосов
/ 10 октября 2018

Как сказал kodingkuma , более быстрый способ использования JavaScriptExecutor Но это зависит также от структуры веб-страницы. Я думаю, что хороший подход может быть: Ищите в «Google», какой самый быстрый способ найти WebElements (поиск «Селена, самый быстрый способ найти элемент», вы найдете десятки примеров).

т.е. некоторые результаты:

Какой самый лучший и быстрый способ найти элемент с помощью веб-драйвера? By.XPath или By.ID или что-нибудь еще? И почему? [закрыто]

Какие самые быстрые и медленные способы поиска элементов с помощью Selenium Webdriver?

Какой самый лучший и быстрый способ поиска элементов с помощью Selenium WebDriver

А затем создайте несколько разных процедур и измерьте время, необходимое для загрузки.

(На мой взгляд, хороший способ найти элементы - это изначально проверить, перечислены ли нужные элементы в списке ('li') в списке ('ul' или 'ol') и, если возможно, создать экземпляр list (Of IWebElements), а затем зациклить каждый WebElement внутри него)

Вот пример:

Dim jsExec As OpenQA.Selenium.IJavaScriptExecutor
jsExec = CType(driver, OpenQA.Selenium.IJavaScriptExecutor)
Dim sw As New Stopwatch
Dim MyListOfWebElements As System.Collections.ObjectModel.ReadOnlyCollection(Of IWebElement)

Public Sub Selenium_Load_WebElements_By_JsExecutor()
    sw.Restart()
    MyListOfWebElements = jsExec.ExecuteScript("var result = document.querySelector('...here you put your css selector...'); if(result === null) {} else {result = result.querySelectorAll('li')}; return result;")
    sw.Stop()
    MsgBox("WebElement List (jsExec-css) - Loading time (ms): " & sw.ElapsedMilliseconds)
End Sub

Public Sub Selenium_Load_WebElements_By_Css()
    sw.Restart()
    MyListOfWebElements = Driver.driver.FindElements(By.CssSelector("...your css selector...")).ToList
    sw.Stop()
    MsgBox("WebElement List (Css) - Loading time (ms): " & sw.ElapsedMilliseconds)
End Sub

Public Sub Selenium_Load_WebElements_By_Id()
    sw.Restart()
    MyListOfWebElements = Driver.driver.FindElements(By.Id("...your id...")).ToList
    sw.Stop()
    MsgBox("WebElement List (Id) - Loading time (ms): " & sw.ElapsedMilliseconds)
End Sub

P.S. Обратите внимание, что для использования javaScriptExecutor вам необходимо использовать синтаксис Javascript между '...'.

0 голосов
/ 01 июля 2018

Если вы просто просматриваете данные в Интернете, вы можете просто выполнить javascript для этого, и это должно быть самым быстрым в теории. Нечто подобное должно работать.

JavascriptExecutor js = (JavascriptExecutor)chromeDriver;   

js.executeScript(@"document.getElementById('order_billing_name').value = 'John Doe';");

Если вы фактически используете это для тестирования, вы можете сэкономить некоторое время, используя вызов "find_element_by_id" вместо вызова "find_element_by_xpath" с использованием идентификатора. Это может быть намного быстрее в зависимости от браузера. Так что любой из них будет работать.

chromeDriver.FindElement(By.Id("order_billing_name")).SendKeys("John Doe");
chromeDriver.FindElementById("order_billing_name").SendKeys("John Doe");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...