Selenium 2: что-то не так с кодом «driver.findElement (By.name (" username ")). SendKeys (" ");» - PullRequest
0 голосов
/ 24 мая 2011

Я использую код

driver.findElement(By.name("username")).sendKeys("name");
driver.findElement(By.name("password")).sendKeys("12345");

для входа на сайт.Иногда это будет работать, иногда - нет, ошибка:

Исключение в потоке "main" org.openqa.selenium.NoSuchElementException: Невозможно найти элемент: {"method": "name"," селектор ":" имя пользователя "}

Проблема в том, что иногда это будет работать.Должен ли я использовать Byxpath()?

Ответы [ 4 ]

2 голосов
/ 25 мая 2011

Вы можете использовать WebDriverWait с условиями ожидания элементов:

public class MyTestClass{

    private static final int MAX_WAIT_TIME_SEC = 60;
    private WebDriverWait wait;
    [...]

    public void setField(String fieldname, String text){
        wait = new WebDriverWait(driver, MAX_WAIT_TIME_SEC);
        wait.until(new NameExpectedCondition(xpath));
        WebElement element = driver.findElement(By.name(fieldname));
        if(element != null){
            element.sendKeys(text);
        }
        [...]
    }

    public void foo()
}

с именем ожидаемое условие:

import org.openqa.selenium.By;

public class NameExpectedCondition implements ExpectedCondition<Boolean> {

private String fieldName;

public NameExpectedCondition(String fieldName)
{
    this.fieldName= fieldName;
}

public Boolean apply(WebDriver d) {
    d.findElement(By.Name(fieldName));
    return Boolean.TRUE;
}

}

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

2 голосов
/ 24 мая 2011

Возможно, вы не ожидаете загрузки элемента на странице.Рекомендуется использовать selenium.isElementPresent(locator) или selenium.isVisible(locator) перед выполнением команды sendKeys или аналогичных команд.

1 голос
/ 30 июля 2011

Пожалуйста, добавьте эту команду перед отправкой FindElement:

String strTemp = driver.PageSource;

Вы увидите, что источник не загружает всю страницу.

1 голос
/ 27 мая 2011

Существует самый простой способ решения этой проблемы:

driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 10));

Он будет обрабатывать все исключения NoSuchElementException, просто пытаясь переопределить элемент.

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