Selenium Webdriver: не могу найти элемент по имени класса - PullRequest
0 голосов
/ 03 февраля 2020

В настоящее время я борюсь с Selenium, чтобы выбрать элемент по имени класса. Веб-сайт, который я использую:

http://demo.guru99.com/test/login.html
<div class="col-xs-12 col-sm-6">
            <form action="success.html" method="post" id="login_form" class="box">
                <h3 class="page-subheading">Already registered?</h3>
                <div class="form_content clearfix">
                    <div class="form-group">
                        <label for="email">Email address</label>
                        <input class="is_required validate account_input form-control" data-validate="isEmail" type="text" id="email" name="email" value="">
                    </div>
                    <div class="form-group">
                        <label for="passwd">Password</label>
                        <span><input class="is_required validate account_input form-control" type="password" data-validate="isPasswd" id="passwd" name="passwd" value=""></span>
                    </div>
                    <p class="lost_password form-group"><a href="#" title="Recover your forgotten password" rel="nofollow">Forgot your password?</a></p>
                    <p class="submit">
                        <input type="hidden" class="hidden" name="back" value="my-account">                     <button type="submit" id="SubmitLogin" name="SubmitLogin" class="button btn btn-default button-medium">
                            <span>
                                <i class="icon-lock left"></i>
                                Sign in
                            </span>
                        </button>
                    </p>
                </div>
            </form>
        </div>

Я выяснил, как выбрать элемент по идентификатору, но всякий раз, когда я пытаюсь выбрать его по имени класса, я получаю исключение не найденный элемент. Я не очень понимаю, как это работает, поскольку я пробовал несколько сайтов без успеха. В этом примере элемент имеет несколько классов, но на некоторых веб-сайтах этот метод даже не работает, когда существует только один класс. На этом сайте работает только один класс, но я читал, что это не очень хороший метод, так как вы можете выбрать несколько элементов по ошибке.

IWebElement search = driver.FindElement(By.ClassName("account_input"));

Вот мой код:

driver = new ChromeDriver();          
driver.Url = "http://demo.guru99.com/test/login.html";
driver.Navigate();
IWebElement search = driver.FindElement(By.ClassName("is_required.validate.account_input.form-control"));
search.SendKeys("test");

В этом примере выбор элемента по Id с использованием метода By.Id ("first_name") также не работает:

<span>
      <label class="first_name_label form_label_text"></label>
                <div class="clear"></div>
                <div class="form-item icon">
                  <input value="" data-error="An error has occured." id="first_name" type="text" name="first_name" class="form_item  is_required" placeholder="First Name">
                  <i style="color:rgba(70,75,106,0.5)" class="vs icon-user"></i>                </div>
                                <div class="form-item icon">
                  <input value="" data-error="An error has occured." id="last_name" type="text" name="last_name" class="form_item  is_required" placeholder="Last Name">
                  <i style="color:rgba(70,75,106,0.5)" class="vs icon-user"></i>                </div>
<div class="clear"></div>
</span>

Что я делаю неправильно? Помощь будет принята с благодарностью

Ответы [ 2 ]

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

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

Лучше использовать xpath-подобный тег вместе с классом. Вот код

xpath = "// input [@ name = 'passwd']";

@ -> может использоваться для получения любого параметра внутри тега и использования его согласно Ваше требование.

Это поможет вам. Контакт для получения дополнительной информации.

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

Исправленный код: Xpath вашего имени класса был неправильным.

driver = new ChromeDriver();          
    driver.Url = "http://demo.guru99.com/test/login.html";
    driver.Navigate();
    IWebElement search = driver.FindElement(By.ClassName("is_required validate account_input form-control"));
    search.SendKeys("test");

Другой способ доступа к полю электронной почты:

IWebElement search = driver.FindElement(By.Xpath("//*[@id='email']"));

Надеюсь, это поможет.

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