Я пытаюсь отправить ключи в поля во всплывающем окне. company_name, contact_surname и contact_first_name. Нет iframe. Я также попробовал обработчик окон, но это не сработало. Вот мой фрагмент кода и приведенный ниже HTML-код:
driver.findElement(By.xpath("//input[@name='company_name']")).sendKeys("Ginger Bread");
driver.findElement(By.name("contact_first_name")).sendKeys("Ingrid");
driver.findElement(By.name("contact_surname")).sendKeys("Cumberbridge");
HTML-код:
<div id = "ibox_content" style = "overflow: auto; height: 322px;"><div id = "quickCreateForm" style = "background:silver; padding:4px; border:1px solid white; width:95%;">
<form>
<table width = "100%" border = "0" cellpadding = "2" cellspacing = "0">
<tbody><tr><td colspan = "2" align = "center">
<input type = "button" value = "Create" class = "button" onclick = "return quickCreate(this, true); ">
<input type = "button" value = "Close" class = "button" onclick = "iBox.hide();">
</td></tr>
<tr><td align = "right" valign = "top"><strong>Company:</strong></td>
<td align = "left" valign = "top" nowrap = "">
<input type = "text" name = "company_name" value = "" size = "15" maxlength = "120">
</td></tr>
<tr><td align = "right" valign = "top"><strong>First Name:</strong></td>
<td align = "left" valign = "top">
<input type = "text" name = "contact_first_name" value = "" size = "15" maxlength = "120">
</td></tr>
<tr><td align = "right" valign = "top"><strong>Last Name:</strong></td>
<td align = "left" valign = "top">
<input type = "text" name = "contact_surname" value = "" size = "15" maxlength = "120">
</td></tr>
</tbody></table>
</form>
</div></div>

Попробуйте использовать CSS Selector driver.findElement (By.CssSelector ("input [имя = имя_компании]")). sendKeys ("Имбирный хлеб"); driver.findElement (By.CssSelector ("input [name = contact_first_name]")). sendKeys ("Ингрид"); driver.findElement (By.CssSelector ("вход [имя = контакт_фамилия]")). sendKeys ("Камбербридж");
Приведенный ниже xpath должен вам помочь:
//div[@id='ibox_content' and contains(@style,'height')]//input[@name = "company_name"]
Попробуйте использовать приведенный ниже xpath:
driver.findElement(By.xpath("//input[contains(@name,'company_na')]")).sendKeys("Ginger Bread");
Почему поиск по частичному @name должен быть более эффективным, чем поиск по точному @name?
Вы можете использовать следующий Стратегии поиска для вызова sendKeys() в нужные поля:
Company:
driver.findElement(By.xpath("//div[@id='quickCreateForm']/form//td/strong[contains(.,'Company')]//following::td[1]/input")).sendKeys("Ginger Bread");
First Name:
driver.findElement(By.xpath("//div[@id='quickCreateForm']/form//td/strong[contains(.,'First Name')]//following::td[1]/input")).sendKeys("Ingrid");
Last Name:
driver.findElement(By.xpath("//div[@id='quickCreateForm']/form//td/strong[contains(.,'Last Name')]//following::td[1]/input")).sendKeys("Cumberbridge");
Кажется, вы отправляете ключи до загрузки фактического элемента, поэтому Вам нужно явно указать ожидание, прежде чем вы попытаетесь отправить ему ключи,
WebElement element = new WebDriverWait(Driver,30).until(ExpectedConditions.elementToBeClickable(By.name("company_name")));
или вы можете использовать это,
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
тогда позвони,
driver.findElement(By.xpath("//input[contains(@name,'company_name')]")).sendKeys("Ginger Bread");
Пожалуйста, прочтите, как предоставить минимальный воспроизводимый пример. Поскольку вопрос стоит, на него очень сложно ответить.