Нет кадра, но все равно есть элемент ошибки не найден - PullRequest
0 голосов
/ 29 мая 2019

Ниже мой код, строка => driver.findElement(By.xpath("//*[@id=\"quote_password\"]")).sendKeys("password"); выдает исключение, что элемент не найден

@Test
public void mytest()
{
    System.setProperty("webdriver.chrome.driver","Drivers/chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("http://billing.scriptinglogic.net/index.php/sessions/login");
    driver.findElement(By.xpath("//*[@id='email']")).sendKeys("email");
    driver.findElement(By.xpath("//*[@id='password']")).sendKeys("password");
    driver.findElement(By.xpath("/html/body/div/div/form/input")).click();
    driver.findElement(By.xpath("//*[text()='Quotes']")).click();
    driver.findElement(By.xpath("//*[text()='Create Quote']")).click();
    driver.findElement(By.xpath("//*[@id=\"quote_password\"]")).sendKeys("password");

}

1 Ответ

1 голос
/ 29 мая 2019

Быстрое и грязное решение:

WebDriverWait wait = new WebDriverWait(driver, 15, 100);

driver.get("http://billing.scriptinglogic.net/index.php/sessions/login");
driver.findElement(By.id("email")).sendKeys("<EMAIL>");
driver.findElement(By.id("password")).sendKeys("<PASSWORD>");
driver.findElement(By.name("btn_login")).click();

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[text()='Quotes']"))).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".create-quote"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.id("quote_password"))).sendKeys("password");

Обновляется на основе учетных данных, указанных в комментарии ниже.Я настроил селекторы для использования идентификатора, имени и класса, где это применимо.Нет необходимости использовать сложные локаторы XPath, когда они не нужны.

Требуются явные ожидания в зависимости от того, как работает сайт, и я добавил предложение Джеффа об использовании ожидаемого условия elementToBeClickable дляэлемент ввода (я не думаю, что это действительно требуется в этом случае, хотя, как кажется, сайт никогда не отключает поле ввода, поэтому ожидаемое условие visibilityOfElementLocated действительно так же хорошо) .

Это решение работает для меня в Chrome и Firefox в стандартном режиме и Firefox в безголовом режиме.Он не работает в автономном режиме в Chrome, потому что размер экрана меньше, а когда ширина экрана опускается ниже 1000 пикселей, заголовок изменяется, и текст «Цитаты» никогда не отображается.Ниже 767px заголовок полностью удален, и вы получите боковое меню.Это означает, что поток сценария должен слегка измениться в зависимости от разрешения.

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

driver.manage().window().setSize(new Dimension(1024, 768));

Когда вы делаете этоон проходит в Firefox и Chrome в стандартном и автономном режиме.

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

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