У меня проблемы с селеном. У меня есть этот overlay div, который содержит файл входного типа, и я пытаюсь его выбрать.Selenium: выберите файл с наложением типа ввода
<div class="xenOverlay attachmentUploader" style="z-index: 9999; top: 92.7px; left: 206px; position: fixed; display: block;"><form action="http://localhost/xenforo/index.php?attachments/do-upload" method="post" enctype="multipart/form-data" class="formOverlay AutoInlineUploader AttachmentUploadForm NoAutoHeader" data-overlayclass="attachmentUploader">
<dl class="ctrlUnit">
<dt><label for="ctrl_upload">Upload a File (<span title="1,048,576 bytes">Max 1 MB</span>):</label></dt>
<dd id="SWFUploadContainer" data-placeholder="#SWFUploadPlaceHolder" data-trigger="#ctrl_upload">
<span id="SWFUploadPlaceHolder"></span>
<input type="file" name="upload" class="textCtrl" onchange="this.blur()" id="ctrl_upload">
<input type="reset" value="Close" class="OverlayCloser button smallButton">
</dd>
</dl>
<div class="attachmentConstraints pairsRows">
<dl><dt>Accepted file types:</dt> <dd>zip, txt, pdf, png, jpg, jpeg, jpe, gif, torrent</dd></dl>
</div>
<input type="hidden" name="_xfToken" value="1,1482434233,ccadf23a674c4c4b9def910cf5d55cea4b44ab2a">
<input type="hidden" name="hash" value="a9288bd75c0c87638d9057237511e16c">
<input type="hidden" name="content_type" value="post">
<input type="hidden" name="key" value="">
<input type="hidden" name="content_data[node_id]" value="3">
Я попытался выбрать файл типа входного сигнала по идентификатору и по XPath, но затмить только дает мне ошибки.
WebElement elem = driver.findElement(By.xpath("//*[@id='ctrl_upload']")); elem.sendKeys("C://e.txt");
Я использую Selenium 3.0.1 с ChromeDriver на Windows 10
UPDATE:
Полный код:
статической силы createNewThread (WebDriver драйвер, String категории, Струнный название, строковое сообщение) {
String url = "http://localhost/xenforo/index.php?forums/" + category + "/create-thread";
driver.get(url);
WebElement ttl = driver.findElement(By.className("titleBOT"));
ttl.clear();
ttl.sendKeys(title);
WebElement msg = driver.findElement(By.xpath("//*[@id='ThreadCreate']/fieldset[1]/dl[2]/dd/div/div/iframe"));
msg.click();
msg.clear();
msg.sendKeys(message);
driver.findElement(By.xpath("//*[@id='ctrl_uploader']")).click();
WebElement elem = driver.findElement(By.xpath("//input[@type='file']"));
elem.sendKeys("C:\\e.txt");
//driver.findElement(By.xpath("//*[@id='ThreadCreate']/dl[2]/dd/input[1]")).click();
}
Я думаю, что он не находит элемент, который я ищу. Этот элемент появляется только тогда, когда я нажимаю кнопку и накладывает старый контент.
ОБНОВЛЕНИЕ 2: Я думаю, что я нашел проблему. Загрузка осуществляется через флеш, а не через html, когда я нажимаю кнопку «Flash» через «click()», веб-сайт не реагирует так же, как при реальном нажатии пользователя.
Я немного смущает, что 'WebElement тзд = driver.findElement (К .xpath ("// * [@ id = 'ThreadCreate']/fieldset [1]/dl [2]/dd/div/div/iframe")); это делает. Нажимаем на iFrame, а затем очищаем и отправляем некоторый текст. У меня мало рекомендаций - 1. Вы можете вводить и очищать значения только текстовых полей. 2. Если на вашей странице есть кадр, сначала нужно переключиться на этот кадр, а затем найти элемент под ним. – NarendraR