Флажок в iframe - как проверить, есть ли флажок, и если да, нажмите на него - PullRequest
0 голосов
/ 05 февраля 2019

Я использую Java и chromedriver.До сих пор я использовал следующий код, чтобы просто нажать на кнопку, затем появилось небольшое окно, и я нажал другую кнопку.Интересно, что мне не пришлось менять ни на какой кадр.Все работало нормально.Вот код:

// click on button
driver.findElement(By.xpath(hyperlink_take_order)).click();
// a second small window popped up and I clicked another button
driver.findElement(By.xpath("//a[contains(text(),'accept')]")).click();

До сих пор я использовал xpath для определения кнопок, которые мне нужно нажимать.

Время от времени появляется дополнительный флажок (иногда несколько флажков) навторое маленькое окно, на которое мне всем нужно нажать.Я попытался найти их через xpath, но обнаружил, что xpath здесь не работает.Все, что я получаю в HTML, выглядит примерно так:

Число в скобках [] в этом случае 17232 меняется каждый раз, поэтому я не могу найти имя, которое можно использовать для флажка.Я прочитал много статей о stackoverflow и нашел этот код, который также не работал.

// click on button
driver.findElement(By.xpath(hyperlink_take_order)).click();
// a second small window popped up         
try
{
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
System.out.println("change to iframe worked");
List<WebElement> CHECKBOXlist = driver.findElements(By.xpath("//input[@type='checkbox']"));
for(WebElement checkbox : CHECKBOXlist) 
{
System.out.println("there was a checkbox");
System.out.println(checkbox.getAttribute("name"));
checkbox.click();
}
driver.switchTo().defaultContent();
} 
catch (Exception e) 
{
System.out.println("there was no checkbox");
}
driver.findElement(By.xpath("//a[contains(text(),'accept')]")).click();
<div class="md-checkbox product-service md-theme-whitebackground">
<div tabindex="0" class=md-checkbox-container">
<input name="service[17232]" tabindex="-1" id="service_17232" type="checkbox" value ="1" />
</div>
<label class="md-check-label" for="service_17232">This one is blue</label>
</div>

Есть ли у вас какие-либо идеи, как я могу просто нажать на все (иногда несколько) флажки во втором маленьком окне?Спасибо

1 Ответ

0 голосов
/ 05 февраля 2019

Исходя из предоставленного вами примера HTML, не похоже, что есть фрейм, на который нужно переключиться, поэтому часть driver.switchTo().frame(driver.findElement(By.tagName("iframe"))); не имеет значения.

Для выбора одного флажка:

driver.findElement(By.xpath(//input[@type='checkbox']));

Для выбора нескольких флажков:

List<IWebElement> checkboxes = driver.findElements(By.xpath("//input[@type='checkbox']"));
foreach (IWebElement e in checkboxes) {  e.Click();  }

Наконец, вы можете указать флажки в небольшом окне, а не на всей странице, поэтому вместо этого вы должны использовать этот локатор:

//div[contains(@class, 'product-service')]/div/input[@type='checkbox']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...